如何にすればシンプルに出来るか考えてみましたが、Behavior 使うのが一番シンプルに収まりそうです。フォーカス設定のみだと寂しいので、文字列全選択も書きました。
public class TextBoxBehavior : Behavior<TextBox>
{
/// <summary>
/// フォーカス設定
/// </summary>
public void Focus()
{
this.AssociatedObject.Focus();
}
/// <summary>
/// 全選択
/// </summary>
public void SelectAll()
{
this.AssociatedObject.SelectAll();
}
}
後は、XAML側でボタンクリックされた時などに、CallMethodAction を書くだけでOKです。
<Window x:Class="Sample.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:local="clr-namespace:Sample">
<StackPanel>
<Button Content="Button" HorizontalAlignment="Left" Width="75">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding ElementName=textBoxBehavior}" MethodName="Focus" />
<ei:CallMethodAction TargetObject="{Binding ElementName=textBoxBehavior}" MethodName="SelectAll" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<TextBox HorizontalAlignment="Left" Height="23" Text="TextBox" Width="120">
<i:Interaction.Behaviors>
<local:TextBoxBehavior x:Name="textBoxBehavior" />
</i:Interaction.Behaviors>
</TextBox>
</StackPanel>
</Window>
0 件のコメント:
コメントを投稿