Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在wpf中的另一个控件内的某个内部控件上检测鼠标悬停_C#_.net_Wpf_Xaml_Custom Controls - Fatal编程技术网

C# 在wpf中的另一个控件内的某个内部控件上检测鼠标悬停

C# 在wpf中的另一个控件内的某个内部控件上检测鼠标悬停,c#,.net,wpf,xaml,custom-controls,C#,.net,Wpf,Xaml,Custom Controls,我正在创建一个自定义TexBox,其中包含按钮和标签。我想检测按钮上的鼠标悬停,更改标签的值,然后做更多的事情。 我所知道的是 在代码隐藏中处理鼠标输入事件 设置一些状态变量 在xaml中绑定该状态变量并执行相应的操作 但这听起来并不可爱,如果WPF提供了一些我不知道的东西 <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <Grid.ColumnDefinitions>

我正在创建一个自定义
TexBox
,其中包含
按钮和
标签。我想检测按钮上的鼠标悬停,更改标签的值,然后做更多的事情。
我所知道的是

  • 在代码隐藏中处理鼠标输入事件
  • 设置一些状态变量
  • 在xaml中绑定该状态变量并执行相应的操作
但这听起来并不可爱,如果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>

概括提出的问题

如何检测在控件模板中创建的某些内部控件的鼠标悬停或其他事件?

尝试以下操作:

<Trigger SourceName="keyBtn"
         Property="IsMouseOver"
         Value="True">
    <!--Do stuff here-->
</Trigger>


在你的代码片段中,即在控件模板触发器中,插入这个而不是注释。

就像一个符咒,它是如此简单。