Как сделать так, чтобы кнопка в элементе ComboBox нажимала, когда выпадающий список закрыт?
У меня есть пользовательский элемент управления WPF для некоторых вариантов выбора c и элемент "custom ..." в конце списка, где DataTemplate для пользовательского элемента имеет кнопку "Edit ...".
Кнопка работает в выпадающих элементах, но не в выбранном значении. Нажмите на закрытое поле со списком, вместо этого откроется выпадающий список. Альтернативно - можно ли просто скрыть кнопку «Редактировать ...», когда выпадающий список закрыт?
Простое тестовое приложение XAML, чтобы показать проблему. Нажмите на кнопку, чтобы запустить анимацию, чтобы указать, что она работает.
<Window x:Class="UserControlInPanel.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:UserControlInPanel"
Title="Test" Height="250" Width="400">
<TabControl>
<TabControl.Resources>
<Storyboard x:Key="FlashOnOff">
<DoubleAnimation Storyboard.TargetName="EditButton"
Storyboard.TargetProperty="Opacity"
From="1" To="0"
RepeatBehavior="1x"
Duration="0:0:1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="EditButton"
Storyboard.TargetProperty="Opacity"
From="0" To="1"
RepeatBehavior="1x"
Duration="0:0:1">
</DoubleAnimation>
</Storyboard>
</TabControl.Resources>
<TabItem Header="Combobox Button">
<StackPanel>
<ComboBox x:Name="Selector" SelectedIndex="3" HorizontalContentAlignment="Stretch">
<ComboBox.Resources>
<DataTemplate DataType="{x:Type local:ViewModelItem}">
<Border BorderBrush="Black" BorderThickness="1">
<TextBlock Text="{Binding Text}" Margin="2"/>
</Border>
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelCustom}">
<Border BorderBrush="Black" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Text}" Margin="2"/>
<Button x:Name="EditButton" Content="Edit..." Padding="4,0" Grid.Column="1">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard Storyboard="{StaticResource FlashOnOff}">
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
</Border>
</DataTemplate>
</ComboBox.Resources>
<ComboBox.Items>
<local:ViewModelItem Text="Predefined choice 1"></local:ViewModelItem>
<local:ViewModelItem Text="Predefined choice 2"></local:ViewModelItem>
<local:ViewModelItem Text="Predefined choice 3"></local:ViewModelItem>
<local:ViewModelCustom Text="Custom"></local:ViewModelCustom>
</ComboBox.Items>
</ComboBox>
<TextBox Text="{Binding ElementName=Selector, Path=SelectedIndex, StringFormat='{}{0}'}"></TextBox>
</StackPanel>
</TabItem>
</TabControl>
</Window>
Код:
namespace UserControlInPanel
{
public class ViewModelItem
{
private String m_name = "";
private String m_value = "";
public string Name { get => m_name; set => m_name = value; }
public string Text { get => m_value; set => m_value = value; }
}
public class ViewModelCustom
{
private String m_name = "";
private String m_value = "";
public string Name { get => m_name; set => m_name = value; }
public string Text { get => m_value; set => m_value = value; }
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
Использование. NET 4.5.2, если это имеет значение.