WPF 查找button中style属性中image
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 查找button中style属性中image相关的知识,希望对你有一定的参考价值。
<Button HorizontalAlignment="Left" Margin="871,11,0,0" Name="button1" VerticalAlignment="Top" BorderThickness="0" Cursor="Hand" Visibility="Visible" Click="button1_Click">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Image Name="coles" Stretch="None" Source="/FiscalEncyclopedia;component/Images/close_03.png"></Image>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button
我想后台获取button中这个Image的Source属性
var t = s.Value as ControlTemplate;
var g = t.LoadContent() as Grid;
var b = g.Children[0] as Image;
var source = b.Source;
最后的source 就是你要的值。
上面的方式是创建的新实例。如果你要修改button的值。可以用下面的方式。
var t = this.button1.GetValue(TemplateProperty) as ControlTemplate;
var b = t.FindName("coles", this.button1) as Image;
b.Source = null;//可以修改这个值 参考技术B 更简单的方法是使用TemplateBinding,直接绑定数据。追问
什么意思。我就想要这个数据
追答你要获取Image类型还是其String类型的路径?如果像你这样写死了路径,为何其他地方不能写死呢?
追问获取Image类型,动态更改这个Source。。我已经会了。
追答 //测试private void Button_Click(object sender, RoutedEventArgs e)
Image img = FindChild(this.button1, "coles");
MessageBox.Show(img.RenderSize.ToString());
public static Image FindChild(DependencyObject p, string s)
Image f = null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(p); i++)
var ch = VisualTreeHelper.GetChild(p, i);
Image childType = ch as Image;
if (childType == null)
f = FindChild(ch, s);
if (f != null) break;
else
var e = ch as FrameworkElement;
if (e != null && e.Name == s)
f = (Image)ch;
break;
return f;
追问
Image i = (Image)button1.Template.FindName("coles", button1);
string s = Convert.ToString(i.Source);
我就这么写的啊,好用啊
哦,这个内置的函数就更好了,比我写的性能应该还好。不过我写的那个可以更通用。既然你获取到了,还有什么问题呢?
本回答被提问者采纳以上是关于WPF 查找button中style属性中image的主要内容,如果未能解决你的问题,请参考以下文章
WPF QuickStart系列之样式和模板(Style and Template)
WPF 自定义一个Button控件,通过设置3个张图片,实现:平常状态、鼠标移入、鼠标按下时分别显示3张图片