locked
LightSwitch | Extension で DataTrigger を使うには? RRS feed

  • 質問

  • 以下を参考に、CheckBox と TextBox をもつ Layout Control Extension を作成しました。


    - Walkthrough: Creating a Smart Layout Control Extension

    <StackPanel Orientation="Horizontal">
      <CheckBox IsChecked="{Binding ChildItems[0]}" Name="chk" />
      <framework:ContentItemPresenter ContentItem="{Binding ChildItems[1]}" Name="tbox" MinWidth="150" />
    </StackPanel>


    以下のやり方で、CheckBox の on/off で TextBox.IsEnable が切り替わるようにしました。


    public CheckTextBox()
    {
    	InitializeComponent();
    	chk.Click += (object sender, RoutedEventArgs e) =>
    	{
    		tbox.IsEnabled = !(chk.IsChecked ?? false);
    	};
    }




    これを DataTrigger を使って書き換えてみました。

    <StackPanel Orientation="Horizontal">
      <CheckBox IsChecked="{Binding ChildItems[0]}" Name="chk" />
        
      <framework:ContentItemPresenter ContentItem="{Binding ChildItems[1]}" Name="tbox" MinWidth="150">
        <i:Interaction.Triggers>
          <ei:DataTrigger Binding="{Binding ChildItems[1]}" Value="True">
            <ei:ChangePropertyAction TargetObject="{Binding ElementName=tbox}" Value="False" PropertyName="IsEnabled" />
          </ei:DataTrigger>
          <ei:DataTrigger Binding="{Binding ChildItems[1]}" Value="False">
            <ei:ChangePropertyAction TargetObject="{Binding ElementName=tbox}" Value="True" PropertyName="IsEnabled" />
          </ei:DataTrigger>
        </i:Interaction.Triggers>
      </framework:ContentItemPresenter>
    </StackPanel>


    結果は失敗。以下のようなメッセージが出ました。





    Extension 中に Behavior(?) を入れることは可能だと思っていたのですが、
    どうすれば可能になるのでしょう?
    2012年4月2日 18:35