绑定到 UserControl XAML 内的依赖项 属性
Binding to a Dependency Property inside UserControl XAML
我想重用一个控件,但其中一种情况需要上下文菜单,而其他情况则不需要。这是我的尝试。
public partial class RP8Grid : UserControl {
public bool UseContextMenu {
get { return (bool)GetValue(UseContextMenuProperty); }
set { SetValue(UseContextMenuProperty, value); }
}
// Using a DependencyProperty as the backing store for UseContextMenu. This enables animation, styling, binding, etc...
public static readonly DependencyProperty UseContextMenuProperty =
DependencyProperty.Register("UseContextMenu", typeof(bool), typeof(RP8Grid), new PropertyMetadata(false));
public RP8Grid() {
InitializeComponent();
}
}
并在XAML中使用属性:
<ctls:RP8Grid UseContextMenu="False"/>
现在我无法解决的问题是,如何访问 UserControl 中的 UseContextMenu?
我试过以下方法:
<DataGrid>
<DataGrid.ContextMenu>
<ContextMenu IsEnabled="{Binding UseContextMenu,RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}">
</DataGrid.ContextMenu>
</DataGrid>
结果:
Cannot find source for binding with reference 'RelativeSource
FindAncestor, AncestorType='System.Windows.Controls.UserControl',
AncestorLevel='1'
如果您只是偶尔摆脱 ContextMenu
,这会起作用:
<DataGrid
>
<DataGrid.Style>
<Style TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
<Style.Triggers>
<DataTrigger
Binding="{Binding UseContextMenu, RelativeSource={RelativeSource AncestorType=UserControl}}"
Value="True"
>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu
>
<MenuItem Header="Test Item" />
<MenuItem Header="Test Item" />
<MenuItem Header="Test Item" />
<MenuItem Header="Test Item" />
</ContextMenu>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
</DataGrid>
我想重用一个控件,但其中一种情况需要上下文菜单,而其他情况则不需要。这是我的尝试。
public partial class RP8Grid : UserControl {
public bool UseContextMenu {
get { return (bool)GetValue(UseContextMenuProperty); }
set { SetValue(UseContextMenuProperty, value); }
}
// Using a DependencyProperty as the backing store for UseContextMenu. This enables animation, styling, binding, etc...
public static readonly DependencyProperty UseContextMenuProperty =
DependencyProperty.Register("UseContextMenu", typeof(bool), typeof(RP8Grid), new PropertyMetadata(false));
public RP8Grid() {
InitializeComponent();
}
}
并在XAML中使用属性:
<ctls:RP8Grid UseContextMenu="False"/>
现在我无法解决的问题是,如何访问 UserControl 中的 UseContextMenu? 我试过以下方法:
<DataGrid>
<DataGrid.ContextMenu>
<ContextMenu IsEnabled="{Binding UseContextMenu,RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}">
</DataGrid.ContextMenu>
</DataGrid>
结果:
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1'
如果您只是偶尔摆脱 ContextMenu
,这会起作用:
<DataGrid
>
<DataGrid.Style>
<Style TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
<Style.Triggers>
<DataTrigger
Binding="{Binding UseContextMenu, RelativeSource={RelativeSource AncestorType=UserControl}}"
Value="True"
>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu
>
<MenuItem Header="Test Item" />
<MenuItem Header="Test Item" />
<MenuItem Header="Test Item" />
<MenuItem Header="Test Item" />
</ContextMenu>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
</DataGrid>