如何将行为从xaml转换为c#

时间:2015-04-21 14:26:01

标签: c# xaml behavior

我想重用此行为,并且不能将其放入最近发现的任何类型的资源字典或样式中。所以我想尝试的是将其转换为c#,所以我想继承网格,并在可能的情况下将此行为添加到其中。欢迎任何建议。

这是xaml

 <Grid >
    <i:Interaction.Behaviors>
        <ei:DataStateBehavior Binding="{Binding KeepAlive}"
                              FalseState="InactiveState"
                              TrueState="ActiveState"
                              Value="False" />
    </i:Interaction.Behaviors>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="ActiveState" />
            <VisualState x:Name="InactiveState">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames 
                     Storyboard.TargetName="ActiveContainer" 
                     Storyboard.TargetProperty="(Control.IsEnabled)">
                        <DiscreteObjectKeyFrame KeyTime="0:0:0">
                            <DiscreteObjectKeyFrame.Value>
                                <system:Boolean>False</system:Boolean>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames
                    Storyboard.TargetName="InactiveContainer" 
                    Storyboard.TargetProperty="(UIElement.Visibility)">
                        <DiscreteObjectKeyFrame KeyTime="0:0:0">
                            <DiscreteObjectKeyFrame.Value>
                                <Visibility>Visible</Visibility>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
  </Grid >

谢谢

修改 我只是想这样做,因为这种行为完全符合我的需要。但是我使用它的地方很多,而且我必须不断为每个网格添加它,我希望有一种Grid可以默认使用它。

1 个答案:

答案 0 :(得分:1)

此样式用于维持启用或禁用控件的状态,并在条件更改时简单地切换状态。

通过表达,这是绑定到目标控件的InotifyProperty的viewmodel上的布尔IsEnabled更改值属性,这就是所需要的。

然后无论因素如何,都可以在代码后面或甚至在Xaml中切换值。

更新

由于您提到网格/样式在许多地方重用,因此创建一个自定义用户控件,该控件基于网格构建并在其中构建样式。这样,所有样式提示(例如显示的那些)都可以集中到新网格中,并无缝地删除(重用)到其他xaml页面。