我创建了自定义按钮。我想在控件中定义样式,但这种样式它不使用因为我使用了这个控件的样式。 这是我的代码:
<Button x:Class="Spd.Client.Controls.IconButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Spd.Client.Controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Button.Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
DONT WORKED
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="ToolTip" Value="{Binding TooltipMessage}" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<StackPanel Orientation="Horizontal">
<Rectangle Width="12" Height="12" Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{Binding Path=Icon,RelativeSource={RelativeSource AncestorType={x:Type local:IconButton}}}" />
</Rectangle.OpacityMask>
</Rectangle>
<TextBlock Text="{Binding Path=Message,RelativeSource={RelativeSource AncestorType={x:Type local:IconButton}}}" FontSize="10" Margin="2 0 0 0"/>
</StackPanel>
</Button>
用法:
<controls:IconButton Message="Click me!"
Icon="{StaticResource appbar_user}" Style="{StaticResource SuccessButton}"
TooltipMessage="This is tooltip for disabled button" IsEnabled="False"/>
仅使用Style = {StaticResource SuccessButton}并且不要在按钮中使用它来设置工具提示。 什么是正确解决方案?感谢
答案 0 :(得分:1)
这是我的建议:
的Xaml:
<UserControl x:Class="CustomButtonSOSHelpAttempt.IconButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:customButtonSosHelpAttempt="clr-namespace:CustomButtonSOSHelpAttempt">
<Button>
<Button.Style>
<Style BasedOn="{StaticResource {x:Type Button}}"
TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="ToolTip" Value="{Binding Path=ToolTipMessage, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type customButtonSosHelpAttempt:IconButton}}}" />
<Setter Property="ToolTipService.ShowOnDisabled" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<StackPanel Orientation="Horizontal">
<Rectangle Width="12"
Height="12"
Fill="{Binding Path=Foreground,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type customButtonSosHelpAttempt:IconButton}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{Binding Path=Icon,
RelativeSource={RelativeSource AncestorType={x:Type customButtonSosHelpAttempt:IconButton}}}" />
</Rectangle.OpacityMask>
</Rectangle>
<TextBlock Margin="2 0 0 0"
FontSize="10"
Text="{Binding Path=Message,
RelativeSource={RelativeSource AncestorType={x:Type customButtonSosHelpAttempt:IconButton}}}" />
</StackPanel>
</Button></UserControl>
XAML的代码背后:
public partial class IconButton
{
public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(IconButton), new PropertyMetadata(default(string)));
public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(object), typeof(IconButton), new PropertyMetadata(default(object)));
public static readonly DependencyProperty ToolTipMessageProperty = DependencyProperty.Register("ToolTipMessage", typeof(object), typeof(IconButton), new PropertyMetadata(default(object)));
public IconButton()
{
InitializeComponent();
}
public string Message
{
get { return (string) GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
public object Icon
{
get { return (object) GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
public object ToolTipMessage
{
get { return (object) GetValue(ToolTipMessageProperty); }
set { SetValue(ToolTipMessageProperty, value); }
}
}
Window类中的用法:
<Window x:Class="CustomButtonSOSHelpAttempt.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CustomButtonSOSHelpAttempt"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow"
Width="525"
Height="350"
mc:Ignorable="d">
<Window.Resources>
<Image x:Key="AppbarUser"
Source="Res/appbar_user.png" />
</Window.Resources>
<Grid>
<local:IconButton Width="100"
Height="100"
Foreground="#FF00FF00"
Icon="{StaticResource AppbarUser}"
IsEnabled="False"
Message="click me!!!"
ToolTipMessage="Tool tip message!!!" />
</Grid></Window>
此解决方案对我有用,但 第一所有人都试图以下一种方式更改您的风格解决方案:
<Button.Style>
<Style BasedOn="{StaticResource {x:Type Button}}"
TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="ToolTip" Value="{Binding Path=ToolTipMessage, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type customButtonSosHelpAttempt:IconButton}}}" />
<Setter Property="ToolTipService.ShowOnDisabled" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
我无法做到这一点,因为我没有让你的代码落后。 这就是全部,如果您需要更多解释,请告诉我。
最诚挚的问候。