0

各アイテムがボタンを含むdataTemplateで構成されているlistViewがあります。これは、リストアイテムをクリックすると、ボタンクリックのように機能して「ウィザード」の次のステップに移動するという要件によるものです。

DataTemplateの各ボタンには、ControlTemplateが含まれています。

コマンドのCanExecuteがfalseの場合、このcontrolTemplate内の項目は無効になります。具体的には、以下の私の例では、ボタンのテンプレート内のボタン(テンプレートとして画像を含むもの)も無効になっています。

そのボタンに関連付けられたコマンドが無効になっている場合でも、テンプレート内のアイテムを有効に保つにはどうすればよいですか。

概要:ボタンには、別のボタンを含むテンプレートがあります。親ボタンのコマンドが無効になっている場合、テンプレート内のボタンは無効になります。

XAML:

<ListView.ItemTemplate>
    <DataTemplate>                
        <Button Name="nextButton" Height="30" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Wiz:edited}}, Path=DataContext.ACommand}" CommandParameter="{Binding}">
              <Button.Template>
                <ControlTemplate>                     
                   <StackPanel Orientation="Horizontal">
                      <Label Content="{Binding}"/>
                      <Button>
                         <Button.Template>
                            <ControlTemplate>
                                <Image Source="{Binding source}"/>
                            </ControlTemplate>
                         </Button.Template>
                      </Button>
                   </StackPanel>
                </ControlTemplate>                    
              </Button.Template>
            </Button>
    </DataTemplate>
</ListView.ItemTemplate>
4

1 に答える 1

0

ButtonBaseは、関連付けられているコマンドのCanExecuteをフックします。CanExecuteがfalseを返すと、ButtonBaseはそれをキャッシュし、IsEnabledCoreからfalseを返し、それによってButtonBaseを無効にします。要素が無効になると、その子孫は無効になります。無効にしたくない場合は、コマンドに関連付けないでください(クリックをフックするなど)か、CanExecuteがfalseになるコマンドを使用しないでください(たとえば、からtrueを返す別のラッパーコマンドを使用してください)。 CanExecuteが、ラップされたコマンドのExecuteを呼び出さない)またはボタン内に他の要素を配置しない(listitemがクリックされたときにコマンドを実行する添付の動作を作成/使用する)。

于 2013-01-15T21:19:53.063 に答える