2017-02-27 3 views
1

私はWPFでテンプレートシステムをよりよく理解しようとしています。ここでの設計目標は、2Dグラフィックスライブラリの代わりにWPFを使用するソフトウェアパッケージのコンポーネントを再設計しようとしていることです。今のところ問題は、画面上に2000個のエンティティがあるため、パンとズームは非常に控えめなi7ワークステーションでは遅いということです。私はパフォーマンスを改善するためにWPFで再開発したい。DataTemplate ListBoxItem for MouseOver

テストと同様に、私は新しいプロジェクトを作成し、キャンバスで基本的なXAML/WPFビューを作成しました。このキャンバスには省略記号が表示されています(基本的には、さまざまな色の円を描いていて、さまざまなことを示すために2Dマップを作成しています)。

今、サークルがどのような種類のサークル(サークルAまたはサークルB)に応じて、DataTemplateを使用してサークルを正しく表示できます。円の上にマウスを置くと、ウィンドウのデフォルトの「青いボックス」の後ろに、削除したい領域があります。これまで私は、マウスの上で円の色を変更するためにトリガを使用することができましたが、私はまだホバーエリアを持っています。

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、Y位置に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> 
関連する問題