- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已将 MenuFlyout 添加到 ItemsControl.ItemTemplate 中的按钮。我也能够将当前项目绑定(bind)为 CommandParameter。现在我想将 Command 绑定(bind)到 MenuFlyoutItem。在代码隐藏中:
LayoutRoot.DataContext = this;
因此,如果我绑定(bind)到 LayoutRoot,我实际上将绑定(bind)到我当前的 UserControl。但是以下绑定(bind)不起作用:
Command="{Binding ActivateProfileCommand, ElementName=LayoutRoot}"
它没有给我输出错误,但它不起作用。这是完整的示例:
<controls:HeaderDecorator x:Uid="AccountsHeader" Text="Accounts" x:Name="LayoutRoot" Name="LayoutRoot">
<controls:HeaderDecorator.Resources>
<MenuFlyout x:Key="AccountMenuFlyout">
<MenuFlyoutItem Text="Activate" Name="Activate"
Command="{Binding ActivateProfileCommand, ElementName=LayoutRoot}"
CommandParameter="{Binding}" />
</MenuFlyout>
</controls:HeaderDecorator.Resources>
<StackPanel Orientation="Vertical">
<ItemsControl ItemsSource="{Binding Settings.Profiles}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<HyperlinkButton Content="{Binding}" FlyoutBase.AttachedFlyout="{StaticResource AccountMenuFlyout}" >
<i:Interaction.Behaviors>
<ic:ShowFlyoutBehavior />
</i:Interaction.Behaviors>
</HyperlinkButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</controls:HeaderDecorator>
问题似乎是我试图在资源中使用共享对象。我可以做吗?为什么不呢?
最佳答案
您在这里看到的问题是 MenuFlyoutItem 不再位于您可能认为的 datacontext 中。我会尽我所能解释这一点,因为我认识的一些使用 xaml 的人已经遇到了这个问题,并且为此好几天都没有头绪。众所周知,在您的特定场景中不会显示错误;进一步增加困惑。
简而言之。当 MenuFlyout 添加到您集合中每个项目的 ItemTemplate 内时,它无法访问您可能认为可以访问的 datacontext。在这种情况下,控件现在所在的 datacontext 实际上是它所在的集合中的单个项目。
但是有一个解决办法。我有一些和你相似的东西。一个 ItemsControl,它的 ItemsTemplate 定义包括一个 UIElement,它是 FlyoutBase AP 引用一个 MenuFlyout 在资源字典中定义。
除了我不需要绑定(bind)中的 ElementName 外,xaml 几乎相同。
不过,我现在已将注意力转向收藏品的类型。我的代码看起来像这样。
public class AnItemToList
{
public AnItemToList(Action commandDel)
{
TestCommand = new RelayCommand(commandDel);
}
public string Name { get; set; }
public RelayCommand TestCommand { get; set; }
}
请注意,命令是在项目本身中定义的,我正在传递命令将通过构造函数执行的方法。
对于 MenuFlyoutItem 上的命令绑定(bind),我需要做的就是
<MenuFlyoutItem Text="Activate"
Name="Activate"
Command="{Binding TestCommand}"/>
我没有在此处设置命令参数,因为我只是快速组合了一个基本模板 Windows Phone 应用程序,而预打包的 ICommand 实现没有设置委托(delegate)来获取参数。
如果您现在在命令调用的方法中设置一个断点,您会看到它将从绑定(bind)到引用它的命令的任何 MenuFlyoutItem 调用。
请记住,这不是解决此问题的唯一方法;但这是我自己偶尔使用的。例如,在 WPF XAML 中,您可以使用 RelativeSource 在父控件的 datacontext 上查找命令。
希望这对您有所帮助。
关于c# - 如何使用资源中的 ElementName 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245090/
我的项目中有这个 xaml: // ... 我在 MyControl 类中定义了 IsEditing 依赖属性。 namespace MyNamespace { public pa
我有两个继承自 BaseClass 的子类。 我正在尝试对 BaseClass 类型 的对象使用反射来获取 XmlRootAttribute.ElementName 值。那么,如果有人传入一个 Bas
这是我的网址的一部分 Новый Афон Пицунда Гудаута Гагра Сухум 用户输入城市名称,例如:“Пицунда”,我
我创建了一个显示文件列表的 JTree。这些文件的长度不同。我想在 JTree 中以相同的长度显示它们,例如 20 个字符。如果名称大于 20 个字符,它应该出现在工具提示中。 如何实现?下面是我的
以下哪些 TextBlocks 的绑定(bind)会消耗更多性能: 我确信当 TextBlocks 处于具有许多 sibling 和祖先的高嵌套级别时,我的问
我正在对 Web 应用程序进行一些维护编码,我收到一个 javascript 错误,格式为:“[elementname] 没有属性” 部分代码是通过 AJAX 调用即时生成的,该调用更改了部分页面的
通过名称进行绑定(bind)自引用与通过 RelativeSource 进行自引用之间有什么区别? 例如: 相对 在我的项目中,它们的行为似乎相同,但我直接在窗口中使用它们。这意味着我立即更喜
我有以下 XAML: ... ...
根据x:Reference Markup Extension MSDN 页面,x:Reference References an instance that is declared elsewhere
我已将 MenuFlyout 添加到 ItemsControl.ItemTemplate 中的按钮。我也能够将当前项目绑定(bind)为 CommandParameter。现在我想将 Command
我正在使用 xml,并使用 xsd 来验证我的 xml 文件。我的 xsd 和 xml 文件太长,我可以给你其中的一部分。 XSD 文件: ...
我有一个 Datagrid,它有一个 DataGridTemplateColumn,其中包含一个 ListView,其 Itemsource 绑定(bind)到一个字符串数组。 在该 ListView
我正在尝试将类对象序列化为如下所示的 xml: 0,000 0,000 1,000 1,000 1,000 0,000 0,000 1,000 重要的是没有直
这是 XAML: 绑定(bind)返回错误:System.Windows.Data 错误:2:找不到目标元素的管理 Fram
我有两个 XSD 文件,我想要两个不同的 xsd 文件的元素具有相同的名称但具有不同的属性类型。 假设下面是xml1.xsd te
我有一个datagrid,在datagridtemplatecolumn中,我有一个togglebutton,在检查时,它会在elementName binding的帮助下打开弹出窗口。。
我想创建一个在后台执行操作并可通过托盘图标进行控制的应用程序。这个托盘图标有一个带有复选框的上下文菜单,可以将其设置为已启用,然后后台任务就会启动。 我正在使用 WPF 和 Hardcodet WPF
我正在尝试绑定(bind)一个依赖于同一 DataTemplate 中控件的属性。 举例说明:
我有一个应用程序,它让我可以选择通过 RessourceDictionary 更改应用程序主题,这意味着我只能使用纯 XAML。 现在,我想做的是隐藏一个 DockPanel,它没有 ElementN
使用传统的 {Binding} 语法时,您可以指定元素名称以指向页面上的特定控件,并能够访问其属性。例如,如果页面名为 page你可以这样做: {Binding ElementName=Page, P
我是一名优秀的程序员,十分优秀!