ChildWindow(Silverlight)标题按钮设计问题

3
我是一名设计Silverlight ChildWindow的人,遇到了一个有趣的问题。我在窗口标题上定义了一个按钮,如下所示:
<ChildWindow.Title>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="This is textblock" Grid.Column="0"/>
        <Button Content="Help" Name="btnHelp" Grid.Column="1" Width="100"
                Margin="300,0,0,0" />
    </Grid>
</ChildWindow.Title>

这个窗口可以调整大小。当您尝试调整窗口大小时,“btnHelp”按钮被关闭按钮覆盖,并且“btnHelp”按钮也未对齐到窗口的边缘。我之前尝试使用了StackPanel,同时在两种变体(StackPanel和Grid)中使用了边距,但它们都没有正确地帮助我。代码中的变量是最新的:) 请给我提示,我该怎么做呢? 提前感谢。

1个回答

2
这似乎是在ChildWindow的控件模板中做出了奇怪的选择--Title内容没有被拉伸,因此您无法通过硬编码来进行右对齐。所以,您可以直接将固定宽度应用于网格列宽度:
<controls:ChildWindow.Title>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250"/>
            <ColumnDefinition Width="100"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="This is textblock" Grid.Column="0"/>
        <Button Content="Help" Name="btnHelp" Grid.Column="1" />
    </Grid>
</controls:ChildWindow.Title>

这样做虽然快速简单,但并不是很令人满意。另一种选择是修改控件模板(在上面的链接中),使其表现符合预期。找到显示标题的ContentControl,通过添加HorizontalContentAlignment="Stretch"来拉伸填充可用空间:

<Style TargetType="controls:ChildWindow" x:Key="MyChildWindowStyle">

    <!-- etc ... -->

    <ContentControl Content="{TemplateBinding Title}" FontWeight="Bold" 
                    HorizontalContentAlignment="Stretch"
                    HorizontalAlignment="Stretch" IsTabStop="False" Margin="6,0,6,0" VerticalAlignment="Center"/>

    <!-- etc ... -->
</Style>

这将使您能够使用常规布局控件,例如“Grid”,并且它将按预期呈现:
<controls:ChildWindow Style="{StaticResource MyChildWindowStyle}"
    ...
    <controls:ChildWindow.Title>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="This is textblock" Grid.Column="0"/>
            <Button Content="Help" Name="btnHelp" Grid.Column="1" Width="100"/>
        </Grid>
    </controls:ChildWindow.Title>

Child Window (modified control template)


按照我的预期,这个程序对我来说很有效。非常感谢! - Trevor Philips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接