2017-02-27 82 views
1

我想通過WPF更好地瞭解模板系統。我的設計目標是,我試圖重新設計一個我正在使用WPF而不是2D圖形庫的軟件包的組件。現在的問題是,在屏幕上有2000個實體,平移和縮放對於強健的i7工作站來說非常滯後。我希望在WPF中重新開發它來提高性能。MouseOver的DataTemplate ListBoxItem

就像測試一樣,我創建了一個新項目並使用Canvas創建了基本的XAML/WPF視圖。此畫布顯示橢圓(基本上,我正在爲計劃目的構建一個2D地圖,其中包含不同顏色的圓以顯示不同的內容)。

現在,我使用DataTemplate根據圓圈的類型(圓圈A或圓圈B)顯示了我的圓圈。當我將鼠標懸停在圓上時,我在窗口後面有默認的「藍色框」區域,我希望刪除它。到目前爲止,我已經設法使用觸發器來改變鼠標上的圓形顏色,但我仍然有懸停區域。

enter image description here

<DataTemplate x:Key="HoleBTemplate"> 
    <Grid Width="40" Height="40"> 
     <Ellipse> 
      <Ellipse.Style> 
       <Style TargetType="Ellipse"> 
        <Setter Property="Fill" Value="DeepSkyBlue"/> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Fill" Value="Yellow" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </Ellipse.Style> 
     </Ellipse> 
     <Ellipse Fill="White" Margin="1" IsHitTestVisible="False" /> 
     <TextBlock 
      VerticalAlignment="Center" 
      TextAlignment="Center" 
      HorizontalAlignment="Center" 
      Text="{Binding Name}" 
      IsHitTestVisible="False"> 
     </TextBlock> 
     <Grid.RenderTransform> 
      <TranslateTransform X="-20" Y="-20" /> 
     </Grid.RenderTransform> 
    </Grid> 
</DataTemplate> 

我創建了在X,畫布裏面Ÿ佈置位置的ListBoxItems我自己的ListBox控件。

<controls:ListBoxMap ItemsSource="{Binding Holes}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas></Canvas> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplateSelector> 
     <controls:PlanTemplateSelector 
      HoleATemplate="{StaticResource HoleATemplate}" 
      HoleBTemplate="{StaticResource HoleBTemplate}"/> 
    </ItemsControl.ItemTemplateSelector> 
</controls:ListBoxMap> 

TLDR:如何擺脫鼠標旋轉後的藍色高亮區域?

+2

的可能的複製[如何禁用高亮顯示在列表框中,但保持選擇?(http://stackoverflow.com/questions/4343793/how-to-disable-highlighting-on-listbox-but-keep-選擇) – lokusking

+0

現在將閱讀上面的內容並應用,如果重複 –

回答

0

回答上面的鏈接線程,由Wayne Lo。

<Style TargetType="ListBoxItem"> 
    <Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListBoxItem"> 
       <ContentPresenter/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>