我在设计 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)中使用了边距,但它们没有正确帮助我。代码中的变体是最新的:)你能给个提示吗,我能用它做什么? 提前致谢。
最佳答案
这是 ChildWindow
's control template 中看似奇怪的选择的结果。 -- Title
内容没有被拉伸(stretch),所以如果不对它进行硬编码,你就不能真正右对齐任何东西。因此,您可以继续将固定宽度应用于网格列宽:
<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>
这是快速而肮脏的,但不是很令人满意。另一种方法是修改 ControlTemplate(在上面的链接中),使其按照您的预期运行。找到显示 Title
的 ContentControl
,并通过添加 HorizontalContentAlignment="Stretch"
使其拉伸(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>
关于c# - ChildWindow (Silverlight) 设计问题标题上的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752080/