Как я могу получить элемент из xaml в C # через словарь ресурсов? - PullRequest
0 голосов
/ 07 января 2011

Просто для примера у меня есть код ниже в 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>

Я прочитал этот xaml в классе Wrapper.cs через словарь ресурсов. Тогда как я могу получить доступ к элементу Image из template.xaml в Wrapper.cs.

Не могли бы вы дать мне решение?

С уважением, Дэвид С

1 Ответ

0 голосов
/ 08 января 2011

Требуется ли экземпляр 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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...