wpf如何实现鼠标加ctrl选中控件

wpf如何实现鼠标加ctrl选中控件,第1张

wpf的控件可以使用trigger(触发器)来更改控件不同状态下的显示。

例如你要设置鼠标按下时字体的大小

<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")将这行注释掉


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11446015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存