MouseEnterイベントを別の場所で同時に起こす
プログラム、スタック・オーバーフロー共に初心者です。
記述するべき内容が不足していたら申し訳ありません。
どんどんマサカリを投げていただけるとありがたいです。
環境
・Microsoft Visual Studio 2013 Express for Windows
・.NET Framework 4.5.1
・C# 5.0
現在の動き
xamlで、IconつきButtonとHyperlinkつきTextboxをStackpanelで並べています。
Textboxはマウスカーソルが乗るとテキストに下線が表示され、
マウスカーソルが外れると下線が消えるようにしています。
やりたい事
Buttonにマウスカーソルが乗ると右にあるテキストに下線を表示し、
マウスカーソルが外れると下線が消えるようにしたいです。
ソース
・xaml
<UserControl.Resources>
<ResourceDictionary>
<Style TargetType="TextBlock" BasedOn="{StaticResource DefaultDialogTextStyleKey}">
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource DefaultTextBoxStyleKey}"/>
<Style TargetType="Button" BasedOn="{StaticResource DialogButtonStyle}">
<Setter Property="Height" Value="32"/>
<Setter Property="Width" Value="32"/>
<Setter Property="Margin" Value="0,2,0,2"/>
</Style>
<Style x:Key="BaseStackPanel" TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal"/>
</Style>
<Style TargetType="Hyperlink">
<Setter Property="TextDecorations" Value="None"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.Row="1" Margin="10,0,0,10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0">
<StackPanel Style="{StaticResource BaseStackPanel}">
<Button Command="{Binding ListViewCommand}">
<Image Source="{StaticResource Icon}"/>
</Button>
<TextBlock Width="120">
<Hyperlink Command="{Binding ListViewCommand}"
MouseEnter="OnMouseEnter" MouseLeave="OnMouseLeave">
Test
</Hyperlink>
</TextBlock>
<TextBlock Text="テストです。"/>
</StackPanel>
</StackPanel>
<!--以下同じようなスタックパネルが数個続く-->
</Grid>
</Grid>
</UserControl>
・C#
public MasterRegisterView()
{
InitializeComponent();
}
private void OnMouseEnter(object sender, MouseEventArgs e)
{
var hLink = new Hyperlink();
if (sender.GetType() == hLink.GetType())
{
hLink = (Hyperlink)sender;
hLink.TextDecorations = TextDecorations.Underline;
Mouse.OverrideCursor = Cursors.Hand;
Mouse.UpdateCursor();
}
}
private void OnMouseLeave(object sender, MouseEventArgs e)
{
var hLink = new Hyperlink();
if (sender.GetType() == hLink.GetType())
{
hLink = (Hyperlink)sender;
hLink.TextDecorations = null;
Mouse.OverrideCursor = null;
Mouse.UpdateCursor();
}
}
何が実装可能なのか、何がスマートで理想的な記述方法なのかも分かりません。
//最初に思いついた実装がタイトルの内容です。(ButtonのMouseEnterイベントでTextboxのMouseEnterイベントを起こす)
//Button用のMouseEnterイベントをC#で実装する?
//triggerを使う?
//xamlだけで出来るのでしょうか?
簡単そうなのですが上手い実装方法が思いつかず、質問させていただきました。
ネットで調べてもピンと来ず…頭が固いです。
ご教授お願い致します。