【问题标题】:WPF: set column width from userControlWPF:从 userControl 设置列宽
【发布时间】:2014-02-24 21:16:23
【问题描述】:

如何从嵌套的用户控件中引用列的宽度?

我有一个使用 Grid.ColumnDefinitions 的网格布局:

<Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
</Grid.ColumnDefinitions>

列有用户控件:

<u:box Grid.Column:0 x:Name="one" Count="{Binding Path=Count}">
<u:box Grid.Column:1 x:Name="two" Count="{Binding Path=Count}">

我在 userControl 中有一个变量“Count”,用于设置要显示的元素数量。 如果 Count = 1,我想将第二个 userControl 的 Column-Definition 设置为“0”。让它消失。如果 Count = 0 ,则机器人宽度应设置为“0”,如果 Count = 2,则不应将列宽设置为 0。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    实现结果的一种可能方法是给网格一个明确的名称,并设置一个多值转换器来处理宽度的大小。

    绑定到 Count 时将使用多值转换器。 第一个绑定将采用实际计数。 第二个绑定应采用定义列的指标值,例如一个字符串值(“一”、“二”、“三”)。 第三个绑定应该绑定到实际的网格,使用网格名称。

    <u:box Grid.Column:0 x:Name="one">
     <u:box.Count>
       <MultiBinding Converter="{StaticResource myNameConverter}" 
    ConverterParameter="one">
         <Binding Path="Count"/>
         <Binding ElementName="GridName"/>
      </MultiBinding>
     </u:box.Count>
    </u:box>
    

    在多值转换器中使用所有这三个值,您应该有足够的信息来确定如何调整网格列的大小。

    希望这会有所帮助。

    【讨论】:

    • 是否必须在列定义的定义中设置多值转换器?
    • 我更新了评论,展示了一个投标示例。
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多