将点击操作绑定到自定义 xaml 组件
Binding Click action to custom xaml component
我在 XAML 中有以下自定义控件:
<Button x:Name="button" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Center" Width="200">
<StackPanel Orientation="Horizontal" Width="170">
<TextBlock Text="" FontFamily="Segoe UI Symbol" Visibility="{Binding isFolder, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Text="" FontFamily="Segoe UI Symbol" Foreground="Gold" Visibility="{Binding isFolder, Converter={StaticResource InverseBooleanToVisibilityConverter}}"/>
<TextBlock Text="{Binding title}" Margin="5,0" Foreground="Black"/>
</StackPanel>
我想在 isFolder 上绑定点击操作。所以我创建了一个 xaml 页面并在后面的代码中添加了如下控件:
MyControl item = new MyControl();
item.DataContext = context;
// item.click += context.isFolder ? folderAction : nonFolderAction
没有item.click。如何根据布尔值添加委托以进行点击?
您可以使用中继命令,您可以在其中指定执行命令的条件。
例如:(在您的情况下)
在您的视图模型中:(执行此操作)
private RelayCommand myCommandInViewModel;
public RelayCommand MyCommandInViewModel
{
get { return myCommandInViewModel?? (myCommandInViewModel= new RelayCommand(myCommandInViewModelAction,()=> { return isFolder; })); }
}
其中 myCommandInViewModelAction 包含您的方法定义。
以上是推荐的做法。
否则你可以有另一种方式,在 button.Click 事件中你可以获得发件人的数据上下文并检查其中的 isFolder 属性。
private void someClickEvent(object sender, RoutedEventArgs e)
{
var buttonDataContext = (sender as Button).DataContext;
if(buttonDataContext.isFolder)
{
doSomeThing();
}
else
{
return;
}
}
我在 XAML 中有以下自定义控件:
<Button x:Name="button" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Center" Width="200">
<StackPanel Orientation="Horizontal" Width="170">
<TextBlock Text="" FontFamily="Segoe UI Symbol" Visibility="{Binding isFolder, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Text="" FontFamily="Segoe UI Symbol" Foreground="Gold" Visibility="{Binding isFolder, Converter={StaticResource InverseBooleanToVisibilityConverter}}"/>
<TextBlock Text="{Binding title}" Margin="5,0" Foreground="Black"/>
</StackPanel>
我想在 isFolder 上绑定点击操作。所以我创建了一个 xaml 页面并在后面的代码中添加了如下控件:
MyControl item = new MyControl();
item.DataContext = context;
// item.click += context.isFolder ? folderAction : nonFolderAction
没有item.click。如何根据布尔值添加委托以进行点击?
您可以使用中继命令,您可以在其中指定执行命令的条件。
例如:(在您的情况下)
在您的视图模型中:(执行此操作)
private RelayCommand myCommandInViewModel;
public RelayCommand MyCommandInViewModel
{
get { return myCommandInViewModel?? (myCommandInViewModel= new RelayCommand(myCommandInViewModelAction,()=> { return isFolder; })); }
}
其中 myCommandInViewModelAction 包含您的方法定义。
以上是推荐的做法。 否则你可以有另一种方式,在 button.Click 事件中你可以获得发件人的数据上下文并检查其中的 isFolder 属性。
private void someClickEvent(object sender, RoutedEventArgs e)
{
var buttonDataContext = (sender as Button).DataContext;
if(buttonDataContext.isFolder)
{
doSomeThing();
}
else
{
return;
}
}