![](/img/trans.png)
[英]How do I ensure the entire parent control is visible when a compound XAML control is Tab Selected?
[英]How do I use the MouseBinding on the entire control?
我有一个ListView
,目标是能够双击一个项目以显示一些数据。 我现在拥有的东西可以工作,但前提是我在绿色区域内单击。 如果我在绿色区域外(在它的右边)双击,它不会调用我的命令。 为什么会这样,解决这个问题的正确方法是什么?
XAML
<ListView ItemsSource="{Binding NetworkObjects}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding DisplayItemCommand}"/>
</Grid.InputBindings>
<StackPanel Background="Green">
<TextBlock Text="{Binding Address}"/>
<TextBlock Text="{Binding Port}"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
主视图模型
public ObservableCollection<NetworkObject> NetworkObjects { get; set; }
public MainViewModel()
{
NetworkObjects = new ObservableCollection<NetworkObject>();
for (int i = 0; i < 10; i++)
{
NetworkObjects.Add(new NetworkObject() { Address = $"Address {i}", Port = i });
}
}
网络对象
public class NetworkObject
{
public string Address { get; set; }
public int Port { get; set; }
/* CRUD Commands */
public RelayCommand DisplayItemCommand { get; set; }
public NetworkObject()
{
DisplayItemCommand = new RelayCommand(o =>
{
MessageBox.Show("Wohoo!");
});
}
}
中继指令
public class RelayCommand : ICommand
{
private Action<object> execute;
private Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return this.canExecute == null || this.canExecute(parameter);
}
public void Execute(object parameter)
{
this.execute(parameter);
}
}
修复。 我决定创建自定义ListViewItem
样式并在其中绑定数据。 不,这消除了 hover 效果,但可以使用触发器轻松实现。
<ListView ItemsSource="{Binding NetworkObjects}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Margin="2">
<Grid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding DisplayItemCommand}"/>
</Grid.InputBindings>
<StackPanel Background="Green">
<TextBlock Text="{Binding Address}"/>
<TextBlock Text="{Binding Port}"/>
</StackPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.