【问题标题】:How to Bind two DataGridColumns Widths in WPF?如何在 WPF 中绑定两个 DataGrid 列的宽度?
【发布时间】:2012-02-24 22:33:03
【问题描述】:

我知道DataGridColumns 不在网格的逻辑树或可视树上。我正在使用here 所示的代理。

我需要绑定一些列的宽度。我通常使用这样的绑定:

Width="{Binding ActualWidth, ElementName=LastOperationColumn}

但是,它不起作用。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: c# wpf xaml data-binding datagrid


    【解决方案1】:

    您不能在 DataGrid 列中使用 ElementName,因为它们不是可视树或逻辑树中的对象,它们没有这些绑定所需的名称范围。但是,您可以使用Sourcex:Reference

    {Binding ActualWidth, Source={x:Reference LastOperationColumn}}
    

    当然,如果手动调整此列的大小,绑定会被破坏,这不会改变。

    【讨论】:

    • 它们是固定大小的,所以完全没有问题。谢谢。
    • 嗯...我遇到了一个似乎已知的缺陷:错误 5 服务提供商缺少 INameResolver 服务。
    • @SoMoS:它在运行时对我有用,所以我猜这是一个 gui 设计器错误,你能运行它吗?
    • HB:是的,据报道这是一个设计器错误,但使其无法使用:\ 我想我将通过构造函数中的代码隐藏来模拟绑定。
    • @SoMoS:嗯,每个人都有,我会说设计师设计上无法使用
    【解决方案2】:

    我刚刚查看了一些设置 MaxWidth 的代码,我认为它应该是相同的。这是我使用的语法。

    <DataGridTextColumn...     
        MaxWidth="{Binding Source={x:Static Properties:Settings.Default}, 
                                                Mode=OneWay, 
                                                Path=DescriptionMaxWidth}">
    

    【讨论】:

    • 不,不一样,因为我需要将一列绑定到另一列,这与将一列绑定到设置不同。
    • 不同意味着它在我的场景中没有意义。没必要粗暴。祝你有美好的一天。
    【解决方案3】:

    试试这个:Width="{Binding Path=ActualWidth,ElementName=LastOperationColumn}"

    【讨论】:

    • 我已经在使用这个绑定了。 Path 是 Binding ... 的默认属性,它根本不起作用。
    • 那不值得-1。我给了你一个 +1 来让你回到 0。
    • @BalamBalam:为什么不呢?它没有说什么新东西,也没有帮助。
    • @SoMoS:标记扩展上没有“默认属性”之类的东西,但是您可以调用a constructor which sets the path,这可能会或可能不会导致与直接设置 path 属性的结果相同。
    猜你喜欢
    • 2011-11-29
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多