将 InputGestureText 显示为 Button 的工具提示
Show InputGestureText as a tooltip for a Button
A 有一个 Button
和一个 Command
。我想为每个包含命令的按钮将 InputGestureText
显示为 ToolTip
。
这是我试过的:
<n:ImageButton x:Name="NewRecordingButton" Text="Recording"
Command="util:Commands.NewRecording"
ToolTip="{Binding Source=util:Commands.NewRecording, Path=InputGestureText}"
ToolTipService.Placement="Top" ToolTipService.HorizontalOffset="-5"/>
为简洁起见,我删除了一些元素。
我正在尝试获得与 MenuItem
类似的结果。如果用户将鼠标悬停在按钮上,我想显示快捷方式。
MenuItem
有一个 属性 InputGestureText
, 如果没有设置它会检查项目的 Command
是否是 RoutedCommand
并且会显示显示它能找到的第一个 KeyGesture
的字符串。
您可以通过转换器实现相同的目的(仅适用于 RoutedCommand
):
public class RoutedCommandToInputGestureTextConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
RoutedCommand command = value as RoutedCommand;
if (command != null)
{
InputGestureCollection col = command.InputGestures;
if ((col != null) && (col.Count >= 1))
{
// Search for the first key gesture
for (int i = 0; i < col.Count; i++)
{
KeyGesture keyGesture = ((IList)col)[i] as KeyGesture;
if (keyGesture != null)
{
return keyGesture.GetDisplayStringForCulture(CultureInfo.CurrentCulture);
}
}
}
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}
用法:
<Window.Resources>
<ResourceDictionary>
<local:RoutedCommandToInputGestureTextConverter x:Key="RoutedCommandToInputGestureTextConverter" />
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button
Content="Save"
Command="Save"
ToolTip="{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource RoutedCommandToInputGestureTextConverter}}"
ToolTipService.ShowOnDisabled="True" />
</Grid>
A 有一个 Button
和一个 Command
。我想为每个包含命令的按钮将 InputGestureText
显示为 ToolTip
。
这是我试过的:
<n:ImageButton x:Name="NewRecordingButton" Text="Recording"
Command="util:Commands.NewRecording"
ToolTip="{Binding Source=util:Commands.NewRecording, Path=InputGestureText}"
ToolTipService.Placement="Top" ToolTipService.HorizontalOffset="-5"/>
为简洁起见,我删除了一些元素。
我正在尝试获得与 MenuItem
类似的结果。如果用户将鼠标悬停在按钮上,我想显示快捷方式。
MenuItem
有一个 属性 InputGestureText
, 如果没有设置它会检查项目的 Command
是否是 RoutedCommand
并且会显示显示它能找到的第一个 KeyGesture
的字符串。
您可以通过转换器实现相同的目的(仅适用于 RoutedCommand
):
public class RoutedCommandToInputGestureTextConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
RoutedCommand command = value as RoutedCommand;
if (command != null)
{
InputGestureCollection col = command.InputGestures;
if ((col != null) && (col.Count >= 1))
{
// Search for the first key gesture
for (int i = 0; i < col.Count; i++)
{
KeyGesture keyGesture = ((IList)col)[i] as KeyGesture;
if (keyGesture != null)
{
return keyGesture.GetDisplayStringForCulture(CultureInfo.CurrentCulture);
}
}
}
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}
用法:
<Window.Resources>
<ResourceDictionary>
<local:RoutedCommandToInputGestureTextConverter x:Key="RoutedCommandToInputGestureTextConverter" />
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button
Content="Save"
Command="Save"
ToolTip="{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource RoutedCommandToInputGestureTextConverter}}"
ToolTipService.ShowOnDisabled="True" />
</Grid>