12

WPFにいくつかのテキストボックスとラジオボタンのコレクションがあります。トリガーを使用して、テキストボックスにフォーカスがある場合に名前が付けられた1つのラジオボタンのIsCheckedプロパティを設定したいと思います。いくつか例を確認しましたが、探しているものが見つかりませんでした。MVVMパターンを使用しており、コードビハインドがないことを忘れないでください。

次のコードを試しましたが、このコンパイルエラーが発生しました。

TargetNameプロパティをスタイルセッターに設定することはできません

<UserControl.Resources>
            <Style x:Name="myTest" TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="RadioButton.IsChecked" Value="True"  TargetName="myRadioButton"></Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </UserControl.Resources>

私は他の投稿を読み、DataTriggerが問題を修正しました。

 <Style x:Name="myTest2" TargetType="RadioButton" >
     <Style.Triggers>
        <DataTrigger Binding="{Binding IsFocused, ElementName=myTextBox}" Value="True">
           <Setter Property="IsChecked"  Value="True" ></Setter>
        </DataTrigger>      
    </Style.Triggers>
 </Style>
4

4 に答える 4

2

それぞれの TextBox をトリガー要素として提供する各 RadioButton のスタイルを記述します。以下は、3 つの TextBox と 3 つの RadioButton の例です。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <TextBox x:Name="txtBox0" Grid.Row="0"/>
    <TextBox x:Name="txtBox1" Grid.Row="1"/>
    <TextBox x:Name="txtBox2" Grid.Row="2"/>

    <StackPanel Grid.Row="3" Orientation="Horizontal">
        <RadioButton GroupName="grp1" Content="txt1">
            <RadioButton.Style>
                <Style TargetType="RadioButton">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsFocused, ElementName=txtBox0}" Value="True">
                            <Setter Property="IsChecked" Value="True"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </RadioButton.Style>
        </RadioButton>
        <RadioButton GroupName="grp1" Content="txt2">
            <RadioButton.Style>
                <Style TargetType="RadioButton">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsFocused, ElementName=txtBox1}" Value="True">
                            <Setter Property="IsChecked" Value="True"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </RadioButton.Style>
        </RadioButton>
        <RadioButton GroupName="grp1" Content="txt3">
            <RadioButton.Style>
                <Style TargetType="RadioButton">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsFocused, ElementName=txtBox2}" Value="True">
                            <Setter Property="IsChecked" Value="True"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </RadioButton.Style>
        </RadioButton>
    </StackPanel>
</Grid>
于 2017-09-20T05:49:10.440 に答える
2

ControlTemplate を作成し、トリガーを ControlTemplate.Triggers に追加します。

<ControlTemplate.Triggers>
    <Trigger Property="HasText" Value="True">
        <Setter Property="Visibility" TargetName="LabelText" Value="Hidden" />
     </Trigger>
</ControlTemplate.Triggers>
于 2017-06-09T20:32:30.680 に答える
1

MSDN から:

このプロパティは、setter コレクション (この setter が属するコレクション) が適用されるスコープ内の任意の要素の名前に設定できます。これは通常、このセッターを含むテンプレート内にある名前付き要素です。

TargetNameは、主にコントロール テンプレート内で使用され、使用しようとしているようなスタイル内だけではありません。できることは、自分RadioButtonIsCheckedDP をのIsMouseOverDPにバインドすることですTextBox

于 2012-09-26T19:30:20.290 に答える
0

GotFocus イベントを探していると思います。

XAML の場合:

<TextBox x:Name="textBox1" GotFocus="tb_GotFocus"/>
<TextBox x:Name="textBox2" GotFocus="tb_GotFocus"/>
<TextBox x:Name="textBox3" GotFocus="tb_GotFocus"/>
<RadioButton x:Name="myRadioButton"/>

次に、C# では、イベント ハンドラーは次のようになります。

private void tb_GotFocus(object sender, RoutedEventArgs e)
{
    myRadioButton.IsChecked = true;
}

いずれかの TextBox がフォーカスされると、myRadioButton という名前の RadioButton がチェックされます。

于 2012-09-26T17:50:17.107 に答える