gpt4 book ai didi

c# - MVVM - 通过双击选择列表框中的项目并加粗

转载 作者:行者123 更新时间:2023-12-03 10:24:03 24 4
gpt4 key购买 nike

我想这样做,因此需要双击才能选择 ListBox 中的项目。此选定项目应始终为粗体。我知道 已选项目 属性将不再反射(reflect)我将其视为所选项目的项目,因此我之前用于使所选项目加粗的 XAML 将不再起作用。

<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>

我研究了如何使用 MVVM 处理双击并得出结论,可以使用后面的代码和 MouseDoubleClick 事件。
private void lbProfiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
_viewModel.SelectedProfile = ((ListBox)sender.)SelectedItem as MyProfile;
//What should go here?
}

我的 View 模型将有 已选个人资料我认为将在上面的方法中设置的属性。反正有没有绑定(bind) 已选个人资料在 XAML 中还是必须在后面的代码中进行管理?另外,让这个项目加粗的最好方法是什么?

编辑 1:

我最终稍微调整了 Rachel 的答案,以便单击该项目突出显示但未选中。这样 View 模型可以有一个 SelectedItem 属性和一个 HighlightedItem 属性。
private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount < 2)
e.Handled = true;

var clickedItem = ((ContentPresenter)e.Source).Content as MyProfile;

if (clickedItem != null)
{
//Let view model know a new item was clicked but not selected.
_modelView.HighlightedProfile = clickedItem;

foreach (var item in lbProfiles.Items)
{
ListBoxItem lbi =
lbProfiles.ItemContainerGenerator.ContainerFromItem(item) as ListBoxItem;

//If item is not displayed on screen it may not have been created yet.
if (lbi != null)
{
if (item == clickedItem)
{
lbi.Background = SystemColors.ControlLightBrush;
}
else
{

lbi.Background = lbProfiles.Background;
}
}
}
}
}

最佳答案

DoubleClick 上选择项目的最简单方法只是将点击事件标记为Handled如果 ClickCount小于 2

这也可以让您保留您的 Trigger将文本设置为 Bold当它被选中时

<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="PreviewMouseDown" Handler="ListBoxItem_PreviewMouseDown" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>


private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount < 2)
e.Handled = true;
}

请记住,这会禁用 ListBoxItem 上的所有单击事件。 .如果你想允许一些单击事件,你必须调整 PreviewMouseDown不将特定点击标记为 Handled 的事件.

关于c# - MVVM - 通过双击选择列表框中的项目并加粗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com