仅举例来说,我在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
答案 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}}