WPF如何在模板的Trigger中 根据使用该模板的控件的不同而设置不同的图片内容。 100

<DataTemplatex:Key="DataTemplate_Zoom"><GridWidth="20"Height="20"><Imagex:Name="Image... <DataTemplate x:Key="DataTemplate_Zoom">
<Grid Width="20" Height="20">
<Image x:Name="ImageZoom" Source="{TemplateBinding RadioButton.Content}" Stretch="Fill">
</Image>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Source" Value="Images/diszoom.png" TargetName="ImageZoom"/>
</Trigger>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Source" Value="Images/enzoom.png" TargetName="ImageZoom"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>

为了方便看xml代码,我不光贴出来模板代码还附上截图方便看关键字。

功能描述:我有很多个RadioButton,每个都有Enable和disable状态的图片,我在之前的做法是为每个RadioButton都写了一个模板,在触发器事件中分别制定了2个状态的图片路径。这样做没有问题。
现在的问题是:
我想让所有的RadioButton共用一个模板,但是无法解决这个触发器里的图片路径根据不同的RadioButton获取不同的路径的问题。而且Trigger里无法用TemplateBinding. 想自己写一个类继承RadioButton然后重写Enable改变的方法,但是WPF里不像WinForm,没有对应的可以重写, 请高手来帮忙!!
展开
 我来答
Mickal小米
2012-11-16 · TA获得超过3666个赞
知道大有可为答主
回答量:1542
采纳率:100%
帮助的人:1768万
展开全部
我提供了不用触发器完成的思路。
首先 我写了一个继承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="/WpfApplication1;component/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了!!!有什么问题欢迎继续提问 ^ ^
khlerc
2012-11-16 · TA获得超过420个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:271万
展开全部
每个RadioButton一个模板显然太累赘,没那个必要。
你可以做一个UserControl,在里面放一个RadioButton,初始化时可以给他的Tag打上标记,或者给这个UserControl加一个Id,当发出Enable或者Disable事件时,可以根据此Id获知是哪个RadionButton触发了事件,相应的就可以用switch或者数组来获取图片。
方法很多,具体操作还得看你的具体需求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式