如何通过资源字典从xaml到C#获取元素?

时间:2011-01-07 12:13:53

标签: wpf xaml

仅举例来说,我在template.xaml中有以下代码。

<Border x:Name="PART_ButtonNormal" Grid.Column="0">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Border Name="PART_ImageBorder" Grid.Column="0">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Image Margin="2" Width="16"                                         Source="{Binding Path=SmallIcon, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>
                <Border Height="20" Grid.Row="1" Background="Red"/>
             </Grid>
         </Border>
         <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}"
                                    Margin="2,0,4,0"/>
    </Grid>
</Border>

我通过资源字典在Wrapper.cs类中读取了这个xaml。那么我如何从Wrapper.cs中的template.xaml访问Image元素。

你能不能请任何人给我解决方案?

此致 大卫C

1 个答案:

答案 0 :(得分:0)

在将模板应用于实际Image之后,您是否希望Control实例?如果您在将ControlTemplate应用到Control之前尝试修改Control,我不确定是否可行。

但是,如果您尝试从应用模板的给定public Image FindImage(Control parent) { Queue<DependencyObject> items = new Queue<DependencyObject>(); items.Enqueue(parent); 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)); } } 获取图像,则可以走可视树:

{{1}}