我已经建立了一个代表下拉菜单的控件。它接受以下参数:
public static readonly DependencyProperty DropDownCommandsDictProperty = DependencyProperty.Register(
nameof(DropDownCommandsDict),
typeof(ObservableCollection<Tuple<string, IAsyncRelayCommand>>),
typeof(ToggleButtonDropDownControl),
new FrameworkPropertyMetadata(
new ObservableCollection<Tuple<string, IAsyncRelayCommand>>(),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public ObservableCollection<Tuple<string, IAsyncRelayCommand>> DropDownCommandsDict
{
get => (ObservableCollection<Tuple<string, IAsyncRelayCommand>>)GetValue(DropDownCommandsDictProperty);
set => SetValue(DropDownCommandsDictProperty, value);
}
字符串
下拉控件与一个ToggleButton和一个Popup一起显示其命令,参见屏幕截图Screenshot of dropdown menu
绑定定义如下。
在下拉控件中:
<ListView ItemsSource="{Binding Path=DataContext.RecipeDropDownCommandsDict, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, AncestorLevel=1}}">
型
组件的用途:
<sharedControls:ToggleButtonDropDownControl
Caption="..."
DropDownCommandsDict="{Binding Path=DataContext.RecipeDropDownCommandsDict, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, AncestorLevel=1}}"
CommandParameter="{Binding Path=.}"
VerticalAlignment="Center" />
型
绑定在编辑自身和触发visual studio热重载功能后仅工作一次。
如果我将代码从组件中移出并直接粘贴到Xaml中,则一切都按预期工作并执行命令
我在可视化树中上下遍历以查找导致此问题的错误。下拉列表在可视化树的外部-具体来说是在它的底部。
我怀疑这个错误是在这个问题顶部的DependencyProperty中的某个地方。
任何建议都很感激。
编辑:原来样式设置器重写了可单击控件,因此它能够正确处理事件,热重载功能只是让理解/调试变得棘手。
1条答案
按热度按时间s6fujrry1#
原来是一个样式设置器重写了可点击控件,因此它能够正确处理事件,热重载功能只是使理解/调试变得棘手。