【发布时间】:2017-01-09 20:13:19
【问题描述】:
我有一个具有单选的 ListBox。选择项目时,它应该显示其他选项,例如 - 编辑、删除按钮。
所以我这样做了:
<ListBox ItemContainerStyle="{StaticResource MyItemStyle}" Loaded="MyList_Loaded">
</ListBox>
这是我的模板:
<Style x:Key="MyItemStyle" TargetType="ListBoxItem">
<!--Deleted to minimize the snippet-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid x:Name="LayoutRoot" BorderThickness="0,1,0,0" BorderBrush="Black" Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<!--Deleted to minimize the snippet-->
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EditButtons">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<!--Deleted to minimize the snippet-->
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="PressedBackground" Grid.RowSpan="2" Fill="Transparent" Control.IsTemplateFocusTarget="True"/>
<ContentPresenter x:Name="ContentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" Style="{StaticResource BodyContentPresenterStyle}" TextWrapping="NoWrap" VerticalAlignment="Stretch"/>
<Grid Grid.Row="1" HorizontalAlignment="Right" Margin="13,0,13,13" Visibility="Collapsed" x:Name="EditButtons">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<HyperlinkButton
x:Name="SendButton"
VerticalAlignment="Center"
IsTabStop="True"
TabIndex="3"
Margin="7,0,0,0"
Content="Send"
Style="{StaticResource HyperlinksStyle}"
/>
<HyperlinkButton
x:Name="EditButton"
VerticalAlignment="Center"
IsTabStop="True"
TabIndex="3"
Grid.Column="1"
Margin="7,0,0,0"
Content="Edit"
Style="{StaticResource HyperlinksStyle}"
/>
<HyperlinkButton
x:Name="DeleteButton"
VerticalAlignment="Center"
IsTabStop="True"
TabIndex="3"
Grid.Column="2"
Margin="7,0,0,0"
Content="Delete"
Style="{StaticResource HyperlinksStyle}"
/>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我不知道如何将 Click 处理程序绑定到这 3 个超链接按钮。 我尝试过:
private void MyList_Loaded(object sender, RoutedEventArgs e)
{
var sendButton = FindChild<HyperlinkButton>(MyList, "SendButton");
}
和
从可视化编辑器直接在 XAML 中添加处理程序。
但这一切都不起作用。我如何对这 3 个按钮的点击事件做出反应?
【问题讨论】:
-
@AndriiKrupka nop,但 DataContext 是 self,所以如果你想建议绑定到命令,我很高兴看到 UWP 的示例
-
看我的回答。我创建了样本
-
我认为您需要在列表框中有一个 DataTemplate。您应该使用单击事件定义所有按钮,并隐藏或不隐藏与列表框项的选定值相关的它们。您需要创建一个实现 IValueConverter 的 ValueConverter 类,以将选定的(真/假)值转换为可见性属性。