gpt4 book ai didi

WPF 绑定(bind)到网格列宽

转载 作者:行者123 更新时间:2023-12-04 05:35:51 26 4
gpt4 key购买 nike

我正在尝试绑定(bind) DependancyProperty在我的一个用户控件中到 Width Column 的属性(property)在 Grid .

我有类似这样的代码:

<Grid x:Name="MyGridName">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="TitleSection" Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>...</Grid.RowDefinitions>

<GridSplitter x:Name="MyGridSplitter" Grid.Row="0" Grid.Column="0" ... />
</Grid>

在单独的用户控件中,我有以下 DependancyProperty定义。
public static readonly DependencyProperty TitleWidthProperty = DependencyProperty.Register("TitleWidth", typeof(int), typeof(MyUserControl));

public int TitleWidth
{
get { return (int)base.GetValue(TitleWidthProperty); }
set { base.SetValue(TitleWidthProperty, value); }
}

我正在代码中创建 Usercontrol 的实例,因此我有一个类似于此的绑定(bind)语句:
MyUserControl Cntrl = new MyUserControl(/* Construction Params */);
BindingOperations.SetBinding(Cntrl , MyUserControl.AnotherProperty, new Binding { ElementName = "objZoomSlider", Path = new PropertyPath("Value"), Mode = BindingMode.OneWay });
BindingOperations.SetBinding(Cntrl , MyUserControl.TitleWidthProperty, new Binding { ElementName = "TitleSection", Path = new PropertyPath("ActualWidth"), Mode = BindingMode.OneWay });
/* Other operations on Cntrl */

定义的第一个绑定(bind)非常有效,尽管它绑定(bind)到实际的 UIElement(在本例中为 Slider),但绑定(bind)到“TitleSection”(即 Grid 中定义的 ColumnDefinition)失败。在代码中放置断点并监视“TitleSection”会返回预期的对象。

我开始怀疑不能绑定(bind) x:Name'd ColumnDefinition。 谁能建议我如何能够绑定(bind)到网格中第一列的不断变化的宽度?

编辑 #1 - 回答评论

TitleWidth 的 setter 上设置断点的意义上,数据绑定(bind)“失败”。属性,并使用 GridSplitter 控件调整第一列的大小,断点永远不会命中。此外,我希望在 DependancyProperty TitleWidth 时触发的代码更改不会被执行。

正在创建用户控件并将其添加到 Window_Loaded 中 Grid 内的 Stackpanel功能。我希望在构建用户控件时已经呈现了网格。当然是 x:Name'd 元素 TitleSection是可观察的,值为 100当它们被构建时/在绑定(bind)发生之前。

编辑#2 - 可能与此有关?

我一直在浏览 MSDN 页面的 Grid ColumnDefinition 文档,发现了 GridLength()但我无法理解如何在绑定(bind)表达式中使用它。我不能在绑定(bind)代码中使用关联的 GridLengthConverter 作为转换器,因为它不是从 IValueConverter 派生的。

我倾向于以某种方式绑定(bind)到 Grid 对象中一个单元格的 ActualWidth 属性。它似乎不像绑定(bind)到列定义那样干净,但目前我无法让它工作。

最佳答案

ColumnDefinition.Width 不是整数 - 它是 GridLength。
您不能将 GridLength 直接绑定(bind)到 Integer,您需要一个转换器。

这也是为什么不能在没有转换器的情况下将任何 Control 的 Width 属性 (double) 绑定(bind)到 ColumnDefinition 的 Width 属性 (GridLength) 的原因。

关于WPF 绑定(bind)到网格列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/285730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com