同じタイプのすべてのコントロールにXAMLの動作を取り付けこれと同じ設定でTextBox
を実行します。コードを繰り返すのではなく(私が現在行っているように)、そのトリガーをタイプ{x:Type TextBox}
のすべてのコントロールに付加したいと考えています。は、私はそれがそうのような<code>TextBox</code>の<code>GotFocus</code>イベントにアタッチされている<code>InvokeCommandAction</code>を持って
<UserControl.Resources>
<Style TargetType="TextBlock">
<Setter Property="Padding" Value="5,0,0,0" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
残念ながら、このTriggers
のために動作しません:
添付プロパティの「トリガー」のみ適用することができ、これはのように
通常、私は、
Resources
セクションのプロパティを設定しますDependencyObjectから派生した型に変換します。
理想的には、私はこのような何かをしたいと思います:私は、ちょうどメッセージを指定するには、各TextBox
のTag
プロパティを設定する必要が
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="GotFocus">
<i:InvokeCommandAction Command="{Binding GotFocusCommand}" CommandParameter="{Binding Tag}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Style>
</UserControl.Resources>
が表示されます。正しい軌道にいるのですか? ControlTemplate
などを使用するように変更する必要がありますか?私はここに同様の質問見てきました
EDIT:
<UserControl.Resources>
<TextBox x:Key="TextBoxWithTag">
<i:Interaction.Triggers>
<i:EventTrigger EventName="GotFocus">
<i:InvokeCommandAction Command="{Binding GotFocusCommand}" CommandParameter="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
</UserControl.Resources>
その後のようなコントロールに割り当てる:その質問に対しての答えを読んだ後Interaction Triggers in Style in ResourceDictionary WPF
は、私は次のことを試してみましたso:
<ContentControl Grid.Row="0"
Grid.Column="1"
Width="40"
HorizontalAlignment="Right"
Content="{StaticResource TextBoxWithTag}"
Tag="test tag" />
これもまだ不満、動作しません:
添付プロパティを「トリガは」のみ「のDependencyObject」に由来しているタイプに適用することができます。
EDIT 2
ここGotFocusCommand
情報です。 TextBlock
がバインドされたstring
の値を設定します。
これは私のViewModel
である。そして、
private ICommand _gotFocusCommand;
public ICommand GotFocusCommand
{
get
{
if (_gotFocusCommand == null)
{
_gotFocusCommand = new DelegateCommand<string>(TextBoxGotFocus);
}
return _gotFocusCommand;
}
}
private void TextBoxGotFocus(string infoText)
{
CardInfoText = infoText;
}
XAML:
<TextBlock Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2"
HorizontalAlignment="Center"
Text="{Binding CardInfoText}" />
どのようにそのメッセージを表示しますか?そうではなく、何を表示する必要がありますか?ターゲットTextBoxへの参照で十分ですか? – Evk
'ViewModel'に' DelegateCommand'を 'GotFocusCommand'と呼んでいます。これは、' TextBlock'をバインドした値を設定します。私はそれを質問にも追加します。 –