【问题标题】:WPF: Row of ToggleButtons with equal length?WPF:相同长度的ToggleButtons行?
【发布时间】:2011-03-23 05:53:29
【问题描述】:

我目前在我的应用程序中将 RadioButtons 显示为 ToggleButtons 行(请参阅my last question)。但是,我希望按钮具有相同的宽度 - 目前,每个按钮都尽可能宽。

由于我正在使用模板,如果可能,我希望避免在每次使用控件时都指定宽度 - 相反,行中每个按钮的宽度应该等于该行中最宽按钮的宽度团体。

任何想法如何在 XAML 中执行此操作? :-)

【问题讨论】:

  • 干杯基伦,非常感谢!当你是 S.O.像我这样的新手,你很容易想知道人们是否认为你的问题只是愚蠢的 - 获得告诉你其他情况的反馈总是好的:-)

标签: c# wpf xaml wpf-controls radio-button


【解决方案1】:

在您的资源部分创建一个以 ToggleButtons 为目标的样式并将宽度设置为您想要的任何值。

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

【讨论】:

    【解决方案2】:

    也许使用UniformGrid 并设置属性HorizontalAlignement="Stretch" 会有所帮助。

    【讨论】:

    • 刚刚试了一下,效果很好,尽管您可能希望将 UniformGrid 放在画布中,这样它就不会拉伸以填充它所在的整个控件(否则每个按钮都会是单元格的大小,而不是最大按钮的大小)。您确实需要将 Columns 属性绑定到按钮的数量。此外,您似乎不需要设置 Horizo​​ntalAlignment。
    • 这取决于容器。例如,这里是 ItemsControl 的 ItemsPanel(请原谅评论中的格式):
    • 在我看来,UniformGrid 绝对是正确的选择!而且你不需要把它放在Canvas 中来限制它的宽度。您可以简单地将其HorizontalAlignment 属性设置为Left。此外,Columns 属性不需要绑定到按钮的数量!您可以简单地将Rows 属性设置为1,它会根据需要创建尽可能多的列来显示所有子项。
    • 好主意!我明天第一件事要检查这个! :-)
    【解决方案3】:

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

    <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>
    

    【讨论】:

    • 我自己正在编写一个 ElementBinding 答案。 :) 这个解决方案比我的稍微优雅一些​​(将 Width 绑定到已知最长的 ActualWidth)。您的解决方案的好处是,如果这些控件是动态添加的,或者内容发生变化,实现起来会相当简单。
    • 好主意。但是,我认为UniformGrid 是一种更舒适、更直接的解决方案。您可以简单地向面板添加按钮,而不必担心MinWidth 或任何其他内容。它只是工作。像 &lt;UniformGrid Rows="1" HorizontalAlignment="Left"&gt;&lt;Button Content="Foo"/&gt;&lt;Button Content="Bar"/&gt;&lt;Button Content="Foo Bar"/&gt;&lt;/UniformGrid&gt; 这样的东西将使所有 Buttons 具有与“Foo Bar”按钮相同的大小。
    • @gehho - 我同意你对 UniformGrid 的看法(感谢您澄清列的事情,将行设置为 1 要容易得多)。我只发布了这个,因为我认为 WPF 正确处理递归绑定非常好。
    【解决方案4】:

    在每列中使用一个带有 1 个按钮的网格,并像这样定义宽度

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2016-11-21
      • 1970-01-01
      • 2022-08-18
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      相关资源
      最近更新 更多