我正在使用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。
所以我想要做的是将每个控件的名称设置为主题(活动)中的名称字段。
任何人都可以帮助我,或者至少让我知道这是否可行,
提前致谢,
克利。
答案 0 :(得分:7)
根据你想要实现的目标的例子
Style =“{StaticResource RibbonButtonView}”Name =“{Binding Subject.name}”&gt;
您无法在XAML中执行此操作。编译XAML并在编译过程中使用name元素,以便您可以访问代码隐藏中的XAML元素。当XAML编译器将XML元素转换为C#代码时,它使用Name属性作为分部类中变量的名称。它不是可由WPF绑定系统在运行时设置的属性。 Check out this great SO question了解有关此行为的详细信息。
如果你想动态提供控件名称,你需要在代码隐藏中创建它们,但我不知道这是否会实现你想要做的事情,因为我不知道你是什么重新使用Name属性。