【问题标题】:WPF Data Binding - Bind to UI Control from a TemplateWPF 数据绑定 - 从模板绑定到 UI 控件
【发布时间】:2009-12-04 17:40:14
【问题描述】:

我的部分中有一个模板。我想将该模板中某个值的宽度绑定到我的 Main XAML 部分中控件的宽度。

这可以吗? Expression Blend 仅在绑定列表中显示模板。

例如,这就是我想要的工作:

<Windows.Resources>
... My template stuff
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="20" />
      <ColumnDefinition Width="50" />
      <ColumnDefinition Width="{Binding ElementName=SecondColumn, Path=Width}"/>
      <ColumnDefinition Width="30" />
   </Grid.ColumnDefinitions>
... More template stuff
</Windwos.Resources>

<Grid Name="MainGrid">
   <Grid.ColumnDefinitions>
      <ColumnDefinition Name="FirstColumn" Width=".25*" />
      <ColumnDefinition Name="SecondColumn" Width=".5*" />
      <ColumnDefinition Name="ThirdColumn"  Width=".25*" />
   </Grid.ColumnDefinitions>
... Rest of my XAML

【问题讨论】:

    标签: wpf data-binding binding


    【解决方案1】:

    一旦进入模板,您就会与其他元素隔离开来(有充分的理由 - 它可以在其他地方重复使用)。在这种情况下(假设模板在“MainGrid”下的某处使用)看起来您可以使用 RelativeSource FindAncestor Binding 来定位父网格(您需要确保计算 VisualTree 中的网格以获得正确的 AncestorLevel - 仅在此处的代码中,它将是 2)。路径将是 ColumnDefinitions[1].Width。请记住,这取决于您维护使用模板的元素的结构,因此它有点脆弱。还有一种使用 SharedSizeGroup 的替代方法,它可以连接不同级别的网格行或列,但仅适用于自动和固定像素大小。此绑定方法适用于固定大小和 * 大小。

    整个绑定:

    Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=2}, Path=ColumnDefinitions[1].Width}"
    

    【讨论】:

      【解决方案2】:

      您的意思是您希望您的列始终保持相同的宽度,还是您的意思是一开始它们的宽度相同?如果是这样,为什么不定义一个样式并从两列中使用它?

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 2011-04-24
        • 2021-12-25
        • 2014-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        相关资源
        最近更新 更多