Программная установка атрибута имени для элементов WPF - PullRequest
3 голосов
/ 01 апреля 2011

Я пишу тесты с использованием WiPFlash для приложения WPF, разработанного в нашем офисе.Чтобы сделать это, мне пришлось добавить атрибуты имени к нескольким компонентам WPF, которые до сих пор не нуждались в них.

Я попал в блок, хотя пытался установить уникальные имена для набора объектов, которые создаются во время выполнения.XAML выглядит так:

<UserControl x:Class="Atlas.Activities.RibbonActivity.RibbonActivityView" 
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                     xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
                     xmlns:RoutedMessaging="clr-namespace:Caliburn.PresentationFramework.RoutedMessaging;assembly=Caliburn.PresentationFramework" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300">

<ribbon:RibbonButton Style="{StaticResource RibbonButtonView}" Name="RibbonActivity">
    <ribbon:RibbonButton.ContextMenu>
        <ribbon:RibbonContextMenu>
            <ribbon:RibbonMenuItem x:Name="Modify" Header="Modify..." RoutedMessaging:Message.Attach="[Event Click] = [Action Modify]" />
            <ribbon:RibbonMenuItem x:Name="Hide" Header="Hide" RoutedMessaging:Message.Attach="[Event Click] = [Action Hide]" />
            <ribbon:RibbonMenuItem x:Name="Delete" Header="Delete" RoutedMessaging:Message.Attach="[Event Click] = [Action Delete]" />
        </ribbon:RibbonContextMenu>
    </ribbon:RibbonButton.ContextMenu>
</ribbon:RibbonButton>

Конструктор устанавливает тему, используя:

WithSubject(activity);

, которая унаследована от Caliburn.1012 * Итак, я хочу установить имя каждого элемента управления в поле имени субъекта (действия).

Кто-нибудь может мне помочь или хотя бы сообщить мне, если это возможно,

Заранее спасибо,

Кли.

1 Ответ

7 голосов
/ 01 апреля 2011

В соответствии с вашим примером того, чего вы пытаетесь достичь

Style = "{StaticResource RibbonButtonView}" Name = "{Binding Subject.name}">

Вы не можете сделать это в XAML. XAML компилируется, и элемент name используется в процессе компиляции, так что вы можете получить доступ к элементу XAML в коде. Когда компилятор XAML преобразует элемент XML в код C #, он использует свойство Name в качестве имени переменной в частичном классе. Это не свойство, которое может быть установлено во время выполнения системой привязки WPF. Проверьте этот великий вопрос SO для более подробной информации об этом поведении.

Если вы хотите динамически назначать имена элементов управления, вам нужно будет создать их в коде, но я не знаю, достигнет ли это того, что вы пытаетесь сделать, так как я не знаю, что вы ' повторно использовать свойство Name для.

...