2

WPF で特定の UIElement のプロパティをサブスクライブすることは可能ですか?

Heightvalue が変更されたらすぐにアニメーション化しUIElement、新しい高さをリストに追加したいのですが、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>

MainWindow.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

私が正しく理解していれば、あなたは「バインド」したいと思うでしょう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 に答える
0

FrameworkElement クラスのSizeChanged -Event を使用して、必要なことを実行できると思います。UIElementそのクラスなどのすべての 、ButtonまたはTextblockそのクラスから派生するため、イベントを提供します。

登録済みメソッドに渡されるSizeChangedEventArgsには、高さまたは幅が変更された場合の情報が含まれ、新しい値が提供されます。

于 2013-03-13T19:51:34.373 に答える