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属性

参考技术A var s = this.button1.Style.Setters[0] as Setter;
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 中style文件的引用

(WPF)依赖属性

WPF 自定义一个Button控件,通过设置3个张图片,实现:平常状态、鼠标移入、鼠标按下时分别显示3张图片

如何在.cs中统一动态修改xaml中style资源定义的样式

wpf image button样式