例如你要设置鼠标按下时字体的大小
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="FontSize" Value="20"/>
</Trigger>
</Style.Triggers>
按照你的目标,你首先要修改button的模板。在button的template里加
<Grid>
<Image Name="img1" Source="/WpfApplication1component/Image/1.jpg" Visibility="Visible"/>
<Image Name="img2" Source="/WpfApplication1component/Image/2.jpg" Visibility="Collapsed"/>
<Image Name="img3" Source="/WpfApplication1component/Image/3.jpg" Visibility="Collapsed"/>
</Grid>
然后修改相应的trigger即可。
我提供了不用触发器完成的思路。首先 我写了一个继承RadioButton的类。主要是加了两个string类型的字段,用来存放RadioButton 两个状态下的图片路径
public class MyRadioButton:RadioButton
{
public string EnableImaUri
{
get { return (string)GetValue(EnableImaUriProperty)}
set { SetValue(EnableImaUriProperty, value)}
}
public static readonly DependencyProperty EnableImaUriProperty = DependencyProperty.Register("EnableImaUri", typeof(string), typeof(MyRadioButton), null)
public string DisEnableImaUri
{
get { return (string)GetValue(DisEnableImaUriProperty)}
set { SetValue(DisEnableImaUriProperty, value)}
}
public static readonly DependencyProperty DisEnableImaUriProperty = DependencyProperty.Register("DisEnableImaUri", typeof(string), typeof(MyRadioButton), null)
}
然后在页面前台放上一个button和radiobutton。思路是通过radiobutton的IsEnabledChanged事件来改变Image的source。由于第一次加载时是不触发这个事件的,所以image还是要在前台写一遍默认路径。
<local:MyRadioButton x:Name="myRbtn1" EnableImaUri="ranbo.jpg" DisEnableImaUri="shafa.jpg" IsEnabledChanged="myRbtn1_IsEnabledChanged">
<Image Width="100" Height="100" Source="/WpfApplication1component/Images/shafa.jpg"/>
</local:MyRadioButton>
<Button Width="50" Height="20" Click="Button_Click" Margin="10"/>
然后在后台处理逻辑:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (myRbtn1.IsEnabled == true)
{
myRbtn1.IsEnabled = false
}
else
{
myRbtn1.IsEnabled = true
}
}
private void myRbtn1_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
MyRadioButton rBtn = sender as MyRadioButton
Image img = rBtn.Content as Image if (img == null) return
if (rBtn.IsEnabled == true)
{
Uri uri = new Uri("/Images/" + rBtn.EnableImaUri, UriKind.Relative)
img.Source = new BitmapImage(uri)
}
else
{
Uri uri = new Uri("/Images/" + rBtn.DisEnableImaUri, UriKind.Relative)
img.Source = new BitmapImage(uri)
}
}
OK了!!!有什么问题欢迎继续提问 ^ ^
所提问题与错误无关.你发生问题的地方在於 Ellipse.NameProperty, 对於作为 FrameworkElementFactory, 它的 Name 属性可不是通过设置 NameProperty来设定, 而必须是在构造时完成.
对於你的代码, 只要将两行稍作修改即可:
FrameworkElementFactory ellipse = new FrameworkElementFactory(typeof(Ellipse), "templateEllipse") // 在构造中就指定名字
// ellipse.SetValue(Ellipse.NameProperty, "templateEllipse")将这行注释掉
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)