2008-12-23 38 views
8

Ok trong hình ảnh cuộn ListBox của tôi w/văn bản, v.v. saga tiếp tục. Khi tôi nhấp vào một trong các mục, để chọn nó, chạy một quy trình để mở một trình duyệt web và đi đến một URL cụ thể. Vấn đề tôi đang gặp phải là khi ứng dụng WPF mất tập trung và trình duyệt web mở ra, mục được nhấp vào bên trong hộp danh sách sẽ chuyển sang màu trắng. Đây là toàn bộ ListBox XAML. Tôi đã thiết lập các mục được chọn để minh bạch, do đó, điều này có cái gì để làm với các ứng dụng WPF mất tập trung?WPF ListBox Image Chọn saga tiếp tục

Có điều gì tôi có thể thêm mã tom chạy quy trình để mở trình duyệt web để đặt tiêu điểm trở lại ứng dụng WPF không?

Cảm ơn.

<ListBox ItemsSource="{Binding Source={StaticResource WPFApparelCollection}}" Margin="61,-8,68,-18" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.HorizontalScrollBarVisibility="Hidden" SelectionMode="Single" x:Name="list1" MouseLeave="List1_MouseLeave" MouseMove="List1_MouseMove" Style="{DynamicResource ListBoxStyle1}" Background="Transparent" BorderThickness="0"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="Background" Value="Transparent" /> 
       <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /> 
       <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /> 
       <Setter Property="Padding" Value="20,10,20,10" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
          <Border x:Name="Bd" SnapsToDevicePixels="true" Background="Transparent" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
           <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="true"> 
            <Setter Property="Background" TargetName="Bd" Value="Transparent" /> 
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> 
           </Trigger> 
           <MultiTrigger> 
            <MultiTrigger.Conditions> 
             <Condition Property="IsSelected" Value="true" /> 
             <Condition Property="Selector.IsSelectionActive" Value="false" /> 
            </MultiTrigger.Conditions> 
            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" /> 
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
           </MultiTrigger> 
           <Trigger Property="IsEnabled" Value="false"> 
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel Orientation="Horizontal" IsItemsHost="True" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Vertical"> 
        <Grid> 
         <Image Source="{Binding Image}" MouseLeave="Image_MouseLeave" MouseEnter="Image_MouseEnter" Cursor="Hand" Tag="{Binding Link}" MouseLeftButtonDown="Image_MouseLeftButtonDown" VerticalAlignment="Top" HorizontalAlignment="Left"></Image> 
        </Grid> 
        <Label Content="{Binding Name}" Cursor="Hand" Tag="{Binding Link}" MouseLeftButtonDown="Label_MouseLeftButtonDown" VerticalAlignment="Bottom" Foreground="White" Style="{StaticResource Gotham-Medium}" FontSize="8pt" HorizontalAlignment="Center" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Trả lời

36

Một mẹo tôi đã tìm thấy khi chơi với màu lựa chọn trong ListBox là làm việc với bàn chải hệ thống hơn là chống lại chúng.

Khi một ListBox được lấy nét và một mục được chọn, nền của mục đó là SystemColors.HighlightBrush. Khi ListBox mất tập trung, tuy nhiên, nền của mục đã chọn trở thành SystemColors.ControlBrush.

Biết điều này, bạn có thể ghi đè các chổi hệ thống cho ListBox đó sao cho các mục bên trong được tô màu bạn muốn.

<ListBox> 
    <ListBox.Resources> 
     <!-- override the system brushes so that selected items are transparent 
      whether the ListBox has focus or not --> 
     <SolidColorBrush 
      x:Key="{x:Static SystemColors.HighlightBrushKey}" 
      Color="Transparent" /> 
     <SolidColorBrush 
      x:Key="{x:Static SystemColors.ControlBrushKey}" 
      Color="Transparent" /> 
     <SolidColorBrush 
      x:Key="{x:Static SystemColors.HighlightTextBrushKey}" 
      Color="Black" /> 
    </ListBox.Resources> 
    <!-- ... your items here ... --> 
</ListBox> 
+0

Wow ... bạn da man. Ý tưởng rất hay ở đây. Tôi phải bắt đầu suy nghĩ WPFish, chứ không phải Webform/Winform. Cảm ơn một lần nữa. John –

+0

Nhưng nếu bạn có menu ngữ cảnh trong ListBox, các mục trong ContextMenu sẽ không có đánh dấu, phải không? Làm thế nào tôi có thể đạt được cả hai hành vi? – jpsstavares

+0

@jpsstavares Yeah, ContextMenus không phải là một phần kỹ thuật của cùng một cây trực quan với tư cách là chủ sở hữu của chúng, vì vậy các cọ vẽ sẽ không được kế thừa. Bạn có thể phải sao chép chúng trong tài nguyên của ContextMenu, mặc dù tôi đã không thử. –

Các vấn đề liên quan