【问题标题】:How to bind an automatically-set parameter in WPF with MVVM如何将 WPF 中的自动设置参数与 MVVM 绑定
【发布时间】:2020-03-15 22:13:52
【问题描述】:

所以情况如下: 我有一个标签(它的自定义控件衍生物,如果重要的话),我需要使用 MVVM 获取它的宽度和高度。但是,如果我将任一参数设置为 {Binding XXX},它们就不再是 Auto,因此当我在运行时更改字体时,它们的大小不会更新。

我阅读了有关使用 ActualWidth/Height 的信息,这听起来正是我所需要的,除了它不是依赖参数这一事实,因此我似乎需要为此打破 MVVM。

有没有更好的解决方案?

编辑

嗯,XAML 中的元素看起来没什么特别的。只有一百万个绑定。

<local:DraggableLabel 
                    Content="123" 
                    Margin="{Binding Label2Position, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                    HorizontalAlignment="Left" 
                    VerticalAlignment="Top" 
                    FontFamily="{Binding Label2Font.Family}" 
                    FontSize="{Binding Label2Font.Size}" 
                    FontWeight="{Binding Label2Font.Weight}" 
                    FontStyle="{Binding Label2Font.Style}" 
                    Foreground="{Binding Path=Label2Color, 
                                    UpdateSourceTrigger=PropertyChanged, 
                                    Converter={StaticResource ColorToBrushConverter}
                           }"/>

默认是,

Width="Auto"

不必写得很明确,但可以(什么都不做)。它会在字体更改时调整大小。如果我将其设置为

Width="Binding {Label1Width}"

绑定工作正常,但我不再获得自动调整。

【问题讨论】:

  • 你能出示你的代码吗?
  • 已添加。不过,没有任何启示。我也可以发布自定义控件代码,但它根本不会弄乱这个,因为它派生自 Label 应该表现相同。
  • Label 宽度是否也设置为Auto
  • 宽度和高度都通过属性面板设置为自动,它不在 XAML 中表示,但我测试并在 XAML 中将它们设置为自动执行相同的操作。
  • 由于ActualWidhth 属性是绑定,它不必是DependencyProperty。你应该使用这个。 Label1Width 也是 double 类型的自定义 DependencyProperty

标签: c# wpf binding


【解决方案1】:

好的,所以我找到了解决方法。

由于我创建了一个自定义控件,因此我能够创建一个名为 RealWidth 的新 DependencyProperty,然后我添加了一个 OnSizeChanged 事件,该事件使用您可以在每次调整大小时从元素内部获取的 ActualWidth 值更新它元素的变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多