c# - ChildWindow (Silverlight) 设计问题标题上的按钮

标签 c# silverlight xaml

我在设计 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(在上面的链接中),使其按照您的预期运行。找到显示 TitleContentControl,并通过添加 Horizo​​ntalContentAlignment="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>

Child Window (modified control template)

关于c# - ChildWindow (Silverlight) 设计问题标题上的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752080/

相关文章:

c# - 在 .net core 2.0 中缓存声明

c# - 读取 WPF 应用程序的程序集版本信息

c# - 遍历数据中继器中所有行的最佳方法?

银光 4 : How to trigger an Animation when TextBlock’s Text is changed during a DataBinding?

Silverlight - 史诗般的图形失败(由两个三角形组成的矩形):(

wpf - XAML缩放问题

xaml - 在 Windows Phone 上设置 ListView 的 GroupStyle.Panel

C# 排序类型层次结构

c# - 制作 xaml 子元素的副本

silverlight - 如何使多边形的填充渐变为直线?