1

プロジェクトでユーザーコントロールを作成します。Visibility プロパティが変更されたときに、コード行を実行したい

 VisualStateManager.GoToState(this, "Normal", true);

このプロパティはデータ ソースにバインドされています。

    <usercontrol:CorrectAnswerMessage Grid.Column="1" x:Name="correct"  
Visibility="{Binding IsTrueAnswer,Mode=TwoWay}" VerticalAlignment="Center" 
HorizontalAlignment="Left"></usercontrol:CorrectAnswerMessage>

Visibility プロパティのイベントを作成する方法を探しています。このプロパティが変更されると、イベントが発生します。

ここに私のユーザーコントロールがあります

<UserControl
x:Class="Lifener.UserControls.CorrectAnswerMessage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Lifener.UserControls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="500">
<Grid x:Name="CorrectResult" Width="400" Height="350" Visibility="Visible"  HorizontalAlignment="Center" Margin="0">

    <TextBlock Text="&#xE17E;" FontSize="120"  FontFamily="Segoe UI Symbol" Padding="0" Margin="0"     VerticalAlignment="Center" HorizontalAlignment="Center"  />
    <TextBlock  TextAlignment="Center" Text="&#xE17F;" FontSize="60" FontFamily="Segoe UI Symbol" Margin="130,30,55,215" />
    <TextBlock x:Name="Like" TextAlignment="Center" Text="&#xE19F;" FontSize="60" FontFamily="Segoe UI Symbol" Margin="165,30,20,0" Foreground="Green" RenderTransformOrigin="0.5,0.5" Height="104" VerticalAlignment="Top"/>
    <TextBlock x:Uid="AnswerIsRight" HorizontalAlignment="Left" Margin="185,140,0,0"  TextWrapping="Wrap" Text="Hooora, Right. You are awsome." VerticalAlignment="Top" Width="185" Height="140" TextAlignment="Center" FontSize="28" FontWeight="Bold"/>

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CommonGroups">
            <VisualState x:Name="Normal" >
                <VisualState.Storyboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Like"
                                                    Storyboard.TargetProperty="Foreground"
                                                    Duration="0:0:2.5"
                                                    AutoReverse="True"
                                                    RepeatBehavior="Forever">

                            <DiscreteObjectKeyFrame Value="Red" KeyTime="0"></DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>

                    </Storyboard>
                </VisualState.Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>


</Grid>

4

1 に答える 1

0

MVVM を使用していない場合はGoToState、setter for を呼び出すことができますIsTrueAnswer

MVVM では、何が最善の方法なのかわかりません。おそらく、ユーザー コントロールのモデルからイベントVisibilityChangedを発生させます。

public partial class MyModel
{
    public event EventArgs VisibilityChanged;

    private bool _isTrueAnswer;
    public bool IsTrueAnswer
    {
        get { return _isTrueAnswer; }
        set
        {
            _isTrueAnswer = value;
            VisibilityChanged(this, EventArgs.Empty);
        }
    }

    // etc...
}

そして、ページのコード ビハインドからリスナーを追加します。

public MyPage()
{
    ((MyModel)MyUserControl.DataContext).VisibilityChanged += (sender, args) => {
        VisualStateManager.GoToState(this, "Normal", true);
    };
}
于 2012-12-03T16:46:44.087 に答える