我正在创建一个自定义TexBox
,其中包含Button
和Label
。我想检测按钮上的鼠标悬停并更改Label的值并做更多的事情。
我知道的方式是
但这听起来不太可爱,如果WPF提供了我不知道的东西吗?
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="26"/>
</Grid.ColumnDefinitions>
<Border x:Name="bg" BorderBrush="#d9dce1" BorderThickness="0"/>
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Height="26" />
<TextBlock x:Name="textBlock" Opacity="0.5" Padding="4,0,0,0" TextWrapping="Wrap" Visibility="Hidden" VerticalAlignment="Center"/>
<StackPanel Grid.Column="1" Width="26" Orientation="Horizontal">
<Line DockPanel.Dock="Right" X1="0" Y1="0" X2="0" Y2="26" Margin="0" Stroke="#FFD9DCE1" StrokeThickness="1" Width="1"/>
<Button x:Name="keyBtn" Content="↩" HorizontalContentAlignment="Center" Height="26" Width="26" Background="#f9f9f9" BorderThickness="0" Click="Button_Click">
</Button>
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<!-- Detect Mouseover on button here and set some values -->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="" />
<Condition Property="IsFocused" Value="False" />
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="textBlock" Value="Visible" />
<Setter TargetName="textBlock" Property="Text" Value="Click to record shortcut" />
<Setter Property="Foreground" Value="Black" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="" />
<Condition Property="IsFocused" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="textBlock" Value="Visible" />
<Setter TargetName="textBlock" Property="Text" Value="Type shortcut" />
<Setter Property="Foreground" Value="Red" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
概括问题。
我们如何检测鼠标悬停或控件模板中创建的某些内部控件的其他事件?
答案 0 :(得分:1)
试试这个:
<Trigger SourceName="keyBtn"
Property="IsMouseOver"
Value="True">
<!--Do stuff here-->
</Trigger>
在代码段中插入此代码而不是注释,即在控件模板触发器中。