2

是否可以订阅 WPF 中特定 UIElement 的属性?

我想UIElement在 Heightvalue 更改后立即为 an 设置动画并将新高度添加到列表中,但我看不到如何订阅 HeightProperty?

示例代码:

像这样的东西:

MainWindow.xaml:

<Window x:Class="BibVisualization.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Border Background="Red" Width="30" Grid.Row="0" x:Name="myBorder">
        <TextBlock Text="Really really long text with wrapping, but the wrapping changes based on border's width"
               Width="{Binding ElementName=myBorder, Path=Width}"
               TextWrapping="Wrap" />
    </Border>
    <Button Grid.Row="1" Height="10" 
        Content="Make border bigger" Click="OnButtonClick" />
</Grid>
</Window>

主窗口.xaml.cs

private void OnButtonClick(Object sender, RoutedEventArgs e)
{
    myBorder.Width += 10;
    //Bind to textblock's actualheight and execute OnHeightChange?
}

private int accumulatedChange;

private void OnHeightChange(Object sender, SomeEventArgs? e)
{
    accumulatedChange -= e.OldValue (if possible);
    accumulatedChange += e.NewValue;
}
4

3 回答 3

0

我认为你可以使用 FrameworkElement 类的SizeChanged -Event 来做你想做的事。所有UIElement诸如ButtonTextblock派生自该类的s,因此提供事件。

传递给注册方法的SizeChangedEventArgs包含高度或宽度是否已更改的信息,并提供新值。

于 2013-03-13T19:51:34.373 回答
0

您可以使用为属性DependencyPropertyDescriptor添加一个:ValueChangedHandler

DependencyPropertyDescriptor descriptor=DependencyPropertyDescriptor.FromProperty(UIElement.HeightProperty,typeof(UIElement));
descriptor.AddValueChanged(myUIElementToWatch, new EventHandler(OnHeightOfUiElementChanged));
于 2013-03-13T20:38:21.497 回答
0

如果我理解正确,您想“绑定”到ActualHeight?

看看这个链接(http://meleak.wordpress.com/2011/08/28/onewaytosource-binding-for-readonly-dependency-property/) - 它基本上描述了如何使用附加属性来完成。

也看看我前几天的这个答案,它基本上描述了非常相似的问题。
https://stackoverflow.com/a/15367642/417747
(使用那里的链接下载支持代码 - 您可以通过Style或如文章中所述绑定到 - 都是类似的东西)

您需要ActiveHeight使用本文中描述的方法进行绑定,该方法会更改您的视图模型的MyHeight属性 -set在活动高度更改时处理它。如果有任何问题,请告诉我。

希望能帮助到你。

于 2013-03-13T20:50:52.317 回答