繁体   English   中英

WPF - 绑定到 DependencyProperty 的控件宽度 - 通过 PropertyMetadata 将默认值设置为星号 (*)

[英]WPF - control's width bound to DependencyProperty - setting default value via PropertyMetadata to asterisk (*)

我注意到 VisualStudio 中的警告,我将控件宽度绑定到“*”(星号)无效。 我在 DependencyProperty 定义中使用 PropertyMetadata 来定义代码隐藏中的默认值。 由于它们是字符串类型,因此这似乎不起作用。

我的 XAML 代码:

<TextBox Name="MyTextBox" Text="This is my cute little text." Width="{Binding ElementName=MyBox, Path=TextBoxWidth}" [...]/>

我的代码隐藏:

    public static readonly DependencyProperty MinCharsQueryProperty = DependencyProperty.Register(
        "MinCharsQuery", typeof(int), typeof(MyBoxControl), new PropertyMetadata(1));
    public static readonly DependencyProperty TextBoxWidthProperty = DependencyProperty.Register(
        "TextBoxWidth", typeof(string), typeof(MyBoxControl), new PropertyMetadata("*"));
    public static readonly DependencyProperty TextBoxHeightProperty = DependencyProperty.Register(
        "TextBoxHeight", typeof(string), typeof(MyBoxControl), new PropertyMetadata("26"));

我可以将我的类型从字符串更改为其他类型吗? 我问这个是因为我发现了其他问题,答案是使用new GridLength(80, GridUnitType.Star); 但我在这种情况下的控制不是网格。

或者其他人建议将“自动”与水平对齐拉伸结合使用,因为其他副作用,我不想使用它。

当将星号 ' ' 直接放入 Widht=" " 时,当然可以,如您所知。 当使用后面的代码来设置该属性时,输出说它需要一个双精度而不是一个字符串。 因此,我使用代码隐藏的方式缺少某种预计算,例如创建新的 GridLength 并将其直接分配给控件属性,而不是使用属性元数据的默认值。

1)恐怕我无法通过使用 PropertyMetadata 来实现这一点? 2)当改成直接赋值时,什么是等价于任何控件的宽度和高度的GridLenth? 我只找到与网格相关的问题。

谢谢。

编辑:将 DependencyProperty 更改为 double 类型会导致预期出现字符串异常。 使用“Auto”、“double.NaN”或“Double.NaN”作为字符串不起作用。 它无法将其转换为 double,因为它只是使用 '*' 失败。 控制台说如果给定尝试使用回退值。

在绑定中使用回退值既不适用于 "*"、"Auto"、"double.NaN" 或 "Double.NaN",也不会出现与上述相同的错误。

如果没有给出默认值,则会出现相同的错误,不同之处在于默认输入为 。

看起来如果不使用常规双值,就不可能在 Width-Fields 上使用DataBinding

使用诸如'*''Auto''*'东西只能直接在 XAML 中使用。 所有其他尝试都将导致控制台输出中出现错误。

如果您想使用数据绑定但不提供任何默认值,则必须在控制台输出中接受这些警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM