XAML列表框项目没有突出显示

时间:2017-07-02 14:47:22

标签: wpf xaml listbox

我有一个ListBox,在ListBox中你可以选择项目。由于某种原因,没有这种可视化表示,如果可能的话,我想添加一个。我甚至看不到默认的蓝色。什么都没有。

项目:WPF,使用XAML,C#和MVVM(MVVM Light)。 Visual Studio 2010。

首先要看ListBox本身:

<ListBox ItemsSource="{Binding NodeListViewModel.NodeList, Source={StaticResource Locator}}" Background="Transparent" Name="LbNodes">
            <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                    <Canvas HorizontalAlignment="Left" VerticalAlignment="Top" Width="1400" Height="1200"/>
                </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Canvas.Left" Value="{Binding CanvasLeft}"/>
                <Setter Property="Canvas.Top" Value="{Binding CanvasTop}"/>
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lb_PreviewMouseLeftButtonDown" />
                </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                    <Canvas Background="Black">
                        <Thumb Name="myThumb" Template="{StaticResource NodeVisualTemplate}">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="DragDelta">
                                        <cmd:EventToCommand Command="{Binding NodeListViewModel.DragDeltaCommand, Source={StaticResource Locator}}" PassEventArgsToCommand="True"/>
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </Thumb>
                    </Canvas>
                </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

所以它是一个带有数据模板的ListBox,其中包含一个包含Thumb的Canvas。 &#39; NodeVisualTemplate&#39;如下:

<ControlTemplate x:Key="NodeVisualTemplate">
            <Border BorderThickness="2" BorderBrush="LightBlue" Margin="2" CornerRadius="5,5,5,5">
                <StackPanel>
                    <TextBlock Text="Test" Background="AntiqueWhite"/>
                    <TextBlock Text="{Binding Path=NodeText}" Background="Aqua"/>
                    <StackPanel Orientation="Horizontal">
                        <TextBox Text="Type here" MinWidth="50"/>
                        <Image Source="{StaticResource ImgFolder}" Margin="0,0,5,0" Width="32" Height="32"/>
                    </StackPanel>
                </StackPanel>
            </Border>
        </ControlTemplate>

正如我前面提到的,问题在于,当选择一个项目时,没有视觉突出显示状态。

问题1 :项目是否真的被选中了?

我是这么认为的。后面的代码包含:

private void lb_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        ListBoxItem lbi = sender as ListBoxItem;
        LbNodes.SelectedItem = lbi.DataContext;

        //MessageBox.Show("Selected node name: " + ((lbi.DataContext) as NodeViewModel).NodeText);
    }

MessageBox是一个小测试,允许我检查选择代码是否正在运行以及是否选择了正确的项目。它是。

问题2 :您尝试过这样的事情:

<Style x:Key="myListboxStyle">
<Style.Resources>
    <!-- Background of selected item when focussed -->
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />                
    <!-- Background of selected item when not focussed -->
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" />
</Style.Resources>

为什么我做了。然后我添加了Style =&#34; {StaticResource myListboxStyle}&#34;到我的ListBox,但没有变化。

问题3 :您是否尝试通过ItemContainerStyle执行此操作?

当然是兄弟。 ItemContainerStyle从我在顶部显示的内容改为:

<ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Canvas.Left" Value="{Binding CanvasLeft}"/>
                <Setter Property="Canvas.Top" Value="{Binding CanvasTop}"/>
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lb_PreviewMouseLeftButtonDown" />


                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True" >
                            <Setter Property="Background" Value="Red" />
                        </Trigger>
                    </Style.Triggers>
                    <Style.Resources>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
                    </Style.Resources>
                </Style>
        </ListBox.ItemContainerStyle>

没有变化。仍然没有看到任何亮点。

问题4 :它看起来像什么?

像这样:

enter image description here

不要担心这些问题 - 他们没有关系(我不管怎么说)。但是关于它们的相关变化,我有两个ListBox。第一个是行,它使用与Thumbs相同的数据。一个坐在另一个上面(拇指一个在上面)。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

这里的问题是(我之前遇到过这个问题,显然我没有那么清楚),Canvas似乎默认为非常小的尺寸。所以包含拇指的Canvas很小,即使可以清楚地看到节点本身。