5

トグルボタン用に次のxamlがあります。

<ToggleButton Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2" Command="{Binding DataContext.SelectAllCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
  <ToggleButton.Style>
   <Style TargetType="{x:Type ToggleButton}">
       <Setter Property="Content" Value="Select All"/>
       <Style.Triggers>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="Content" Value="Select None"/>
                <Setter Property="Command" Value="{Binding DataContext.SelectNoneCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
            </Trigger>
          </Style.Triggers>
      </Style>
  </ToggleButton.Style>
</ToggleButton>

ただし、IsCheckedボタンをクリックしてもプロパティは更新されません。

スヌープを使用して IsChecked を True に強制すると、トリガーが作動します。

4

3 に答える 3

5

私はあなたのトグルボタンを試しましたが、うまくいきました。私が見る唯一の問題は、 Command を明示的に設定することです。を壊さないように、Setter代わりに( で行ったように)で行う必要があります。ContentTrigger

<ToggleButton Name="toggleButton" Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2">
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Content" Value="Select All"/>
            <Setter Property="Command"
                    Value="{Binding DataContext.SelectAllCommand,
                                    Mode=OneWay,
                                    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="Select None"/>
                    <Setter Property="Command" Value="{Binding DataContext.SelectNoneCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

それでもクリックできない場合は、ビジュアル ツリー IsHitTestVisibleをさらに上に設定するかどうかを確認します。False

お使いのバージョンを私のテスト アプリと比較して何が機能していないかを確認したい場合は、ここにアップロードしました: http://www.mediafire.com/?ik24ftsfw2wwfwb

于 2011-01-06T18:57:41.543 に答える
2

コマンドをパラメーター化し、ビューモデルの新しいプロパティにバインドし、コマンドをスタイルに移動することで修正しました。

               <ToggleButton Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2" IsThreeState="False" 
                            IsChecked="{Binding DataContext.IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
                    <ToggleButton.Style>
                        <Style TargetType="{x:Type ToggleButton}">
                            <Setter Property="Content" Value="Select All"/>
                            <Setter Property="Command" Value="{Binding DataContext.SelectAllCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>                                
                            <Style.Triggers>
                                <Trigger Property="IsChecked" Value="True">
                                    <Setter Property="Content" Value="Select None"/>                                
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </ToggleButton.Style>
                </ToggleButton>

たまにWPFが好きじゃないですか!

于 2011-01-06T19:07:48.113 に答える
1

推測ですが、BindingMode=OneWayを削除してもう一度お試しください。

于 2011-01-06T17:51:26.873 に答える