2009-10-27 5 views
6

Wie kann ich den Standardrahmen für meine ListBoxItems einen gepunkteten Rahmen erstellen? Siehe folgende Art und Weise es von Styling:Gepunkteter Rahmen für ListBoxItem in WPF

<Grid.Resources> 
    <Style TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Height" Value="30" /> 
     <Setter Property="BorderThickness" Value="0,0,0,1" /> 
     <Setter Property="BorderBrush" Value="Silver" /> 
     <Setter Property="Content" Value="" /> 
     <Style.Triggers> 
      <Trigger Property="ItemsControl.AlternationIndex" Value="3"> 
       <Setter Property="BorderBrush" Value="Black"></Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Grid.Resources> 

Hier habe ich das Alter 0, 1 und 2 auf eine punktierte Grenze statt einer durchgezogenen Linie zu machen. Wie kann das gemacht werden? diese

+0

Siehe auch meine Antwort hier: https://Stackoverflow.com/a/17431518/1230982 Wir konnten diese Technik verwenden, um eine tatsächliche Grenze zu verwenden und die Verwendung von Rechtecken zu vermeiden. –

Antwort

5

Versuchen:

<Window.Resources> 
     <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" /> 
     <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" /> 
     <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" /> 
     <!-- SimpleStyles: ListBoxItem --> 
     <Style TargetType="ListBoxItem" x:Key="ListBoxItemTemplate"> 
      <Setter Property="SnapsToDevicePixels" Value="true"/> 
      <Setter Property="OverridesDefaultStyle" Value="true"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListBoxItem"> 
         <Grid> 
          <Rectangle x:Name="Rectangle" Fill="Transparent" Stroke="Black" 
             StrokeDashCap="Square" StrokeThickness="0" SnapsToDevicePixels="True"> 
           <Rectangle.StrokeDashArray> 
            <sys:Double>5</sys:Double> 
           </Rectangle.StrokeDashArray> 
          </Rectangle> 
          <Border 
           Name="Border" 
           Padding="2" 
           BorderThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness}" 
           BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderBrush}"> 
           <ContentPresenter /> 
          </Border> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="true"> 
           <Setter TargetName="Rectangle" Property="StrokeThickness" Value="1" /> 
           <Setter TargetName="Border" Property="BorderThickness" Value="0" /> 
          </Trigger> 
          <Trigger Property="IsSelected" Value="true"> 
           <Setter TargetName="Rectangle" Property="Fill" Value="{StaticResource SelectedBackgroundBrush}" /> 
          </Trigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource ListBoxItemTemplate}"> 
      <Setter Property="Height" Value="30" /> 
      <Setter Property="BorderThickness" Value="0,0,0,1" /> 
      <Setter Property="BorderBrush" Value="Silver" /> 
      <Style.Triggers> 
       <Trigger Property="ItemsControl.AlternationIndex" Value="3"> 
        <Setter Property="BorderBrush" Value="Black"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

    </Window.Resources> 
    <StackPanel> 
     <ListBox> 
      <ListBoxItem Content="Item 1" /> 
      <ListBoxItem Content="Item 2" /> 
      <ListBoxItem Content="Item 3" /> 
      <ListBoxItem Content="Item 4" /> 
     </ListBox> 
    </StackPanel> 

Also habe ich ein Rechteck unten die eigentliche Grenze in der Steuervorlage. Das Rechteck kann punktiert oder gestrichelt oder mit e/e sein (um den Strich kleiner zu machen, ändern Sie einfach den Teil zu 2, 1 ist nicht bemerkbar). Der Standardwert für die Umrandungsstärke des Rechtecks ​​ist 0, aber wenn ausgewählt, setze ich die Dicke auf 1, so dass sie sichtbar ist. Ich habe einige Randeigenschaften erstellt, die auch an die Elternmatrizen gebunden werden sollen, so dass es so aussehen kann, wie Sie es für Ihren Stil festgelegt haben (Pinsel Silber, Dicke 0,0,0,1).

Verwandte Themen