How can i get the element from xaml to C# through Resource dictionary?

Total Post:96

 2575  View(s)
Rate this:
Hi Developers!

Just for an example i have the below code in template.xaml.

<Border x:Name="PART_ButtonNormal" Grid.Column="0">



            <ColumnDefinition Width="Auto" />

            <ColumnDefinition />


        <Border Name="PART_ImageBorder" Grid.Column="0">



                    <RowDefinition Height="Auto"/>

                    <RowDefinition Height="Auto"/>


                <Image Margin="2" Width="16"  Source="{Binding Path=SmallIcon, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>

                <Border Height="20" Grid.Row="1" Background="Red"/>



         <TextBlock Grid.Column="1" x:Name="PART_Text" Text="{TemplateBinding Label}"

                                    Foreground="{TemplateBinding Foreground}"

                                    FontFamily="{TemplateBinding FontFamily}"

                                    FontSize="{TemplateBinding FontSize}"

                                    VerticalAlignment="{TemplateBinding VerticalAlignment}"                          

                                    HorizontalAlignment="{TemplateBinding HorizontalAlignment}"




I read this xaml in Wrapper.cs class through Resource dictionary. Then how can i access the Image element from template.xaml in Wrapper.cs. 

Could you please any one give me the solution?.

  1. Post:105

    Re: How can i get the element from xaml to C# through Resource dictionary?


    Do you want the Image instance after the template is applied to an actual Control? If you are trying to modify the ControlTemplate itself before applying it to a Control, I'm not sure it is possible. 

    However, if you are trying to get the Image from a given Control that the template is applied to, you can just walk the visual tree: 

    public Image FindImage(Control parent)
        Queue<DependencyObject> items = new Queue<DependencyObject>();
        while (items.Count > 0)
            var item = items.Dequeue() as Visual;
            if (item is Image)
                return item; 
            var count = VisualTreeHelper.GetChildrenCount(item);
            for (int i = 0; i < count; ++i)
                items.Enqueue(VisualTreeHelper.GetChild(item, i));


      Modified On Mar-30-2018 11:17:32 PM