Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:长度相等的一行切换按钮?_C#_Wpf_Xaml_Wpf Controls_Radio Button - Fatal编程技术网

C# WPF:长度相等的一行切换按钮?

C# WPF:长度相等的一行切换按钮?,c#,wpf,xaml,wpf-controls,radio-button,C#,Wpf,Xaml,Wpf Controls,Radio Button,我目前正在应用程序中将单选按钮显示为切换按钮行(请参阅)。然而,我希望按钮具有相同的宽度-目前,每个按钮都与它必须的宽度一样宽 因为我使用的是模板,所以如果可能的话,我希望避免每次使用控件时都指定宽度——相反,行中每个按钮的宽度都应该等于该组中最宽按钮的宽度 你知道如何在XAML中实现这一点吗?:-) 在参考资料部分中,创建一种以切换按钮为目标的样式,并将宽度设置为所需的任何值 <Window.Resources> <Style TargetType="{x:Type

我目前正在应用程序中将单选按钮显示为切换按钮行(请参阅)。然而,我希望按钮具有相同的宽度-目前,每个按钮都与它必须的宽度一样宽

因为我使用的是模板,所以如果可能的话,我希望避免每次使用控件时都指定宽度——相反,行中每个按钮的宽度都应该等于该组中最宽按钮的宽度


你知道如何在XAML中实现这一点吗?:-)

在参考资料部分中,创建一种以切换按钮为目标的样式,并将宽度设置为所需的任何值

<Window.Resources>
    <Style TargetType="{x:Type ToggleButton}">
        <Setter Property="Width" Value="50" />
    </Style>
</Window.Resources>


可能使用
UniformGrid
并在样式中设置属性
HorizontalAlignment=“Stretch”
将有所帮助。

如果您可以访问所有切换按钮(例如,它们没有数据绑定),那么可以通过将每个按钮的最小宽度绑定到旁边按钮的宽度来完成一个巧妙的操作。最后一个按钮绑定到第一个按钮:

<StackPanel Orientation="Horizontal">
    <Button x:Name="Button1" Content="Long text" MinWidth="{Binding ElementName=Button2, Path=ActualWidth}"/>
    <Button x:Name="Button2" Content="A" MinWidth="{Binding ElementName=Button3, Path=ActualWidth}"/>
    <Button x:Name="Button3" Content="Extremely long text that should cause this button to be really wide" MinWidth="{Binding ElementName=Button1, Path=ActualWidth}"/>
</StackPanel>


< /代码> 在每个列中使用一个1个按钮的网格,并定义这样的宽度

我在编写一个元素绑定答案的过程中。此解决方案比我的解决方案略为优雅(将宽度绑定到已知最长长度的实际宽度)。您的解决方案的优点是,如果这些控件是动态添加的,或者如果内容发生了变化,那么实现起来就相当简单。好主意。但是,我认为
UniformGrid
是一个更舒适、更直接的解决方案。您可以简单地将按钮添加到面板,而无需担心
MinWidth
或任何其他问题。它只是工作。类似这样的
将使所有
按钮的大小都与“Foo Bar”按钮的大小相同。@gehho-我同意您关于UniformGrid的看法(感谢您澄清了列的内容,将行设置为1要容易得多)。我之所以发布这篇文章,是因为我认为WPF能够正确处理递归绑定非常好。尽管您可能希望将UniformGrid放在画布中,这样它就不会拉伸以填充它所在的整个控件,但只要尝试一下,它就可以非常好地工作(否则,每个按钮都将是单元格的大小,而不是最大按钮的大小)。不过,您确实需要将Columns属性绑定到按钮的数量。此外,看起来也不需要设置水平对齐方式。这取决于容器。例如,下面是ItemsControl的ItemsPanel(请原谅注释中的格式):在我看来,
UniformGrid
无疑是一个不错的选择!而且你不需要把它放在
画布
中来限制它的宽度。你只需将它的
水平对齐
属性设置为
。另外,
属性也不需要绑定到按钮的数量!你可以只需将
属性设置为
1
,它就可以创建所需数量的列来显示所有的子项。好主意!我明天第一件事就要检查一下!:-)干杯,Kieren,非常感谢!当你像我一样是一个S.O.新手时,你很容易想知道人们是否认为你的问题很愚蠢-得到反馈总是好的,告诉你不是这样:-)