3

我正在使用 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.PresentationFramework.Screens。

所以我想要做的是将每个控件的名称设置为主题(活动)中的名称字段。

任何人都可以帮助我,或者至少让我知道这是否可能,

提前致谢,

克莱。

4

1 回答 1

7

根据您尝试实现的目标的示例

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

您不能在 XAML 中执行此操作。XAML 已编译,并且在编译过程中使用 name 元素,以便您可以在代码隐藏中访问 XAML 元素。当 XAML 编译器将 XML 元素转换为 C# 代码时,它使用 Name 属性作为部分类中变量的名称。它不是 WPF 绑定系统可以在运行时设置的属性。查看这个很棒的 SO question,了解有关此行为的更多详细信息。

如果你想动态地给控件命名,你需要在代码隐藏中创建它们,但我不知道这是否会实现你想要做的,因为我不知道你在使用什么为属性命名。

于 2011-04-01T04:42:18.107 回答