2011-10-10 4 views
1

스타일링 전문가 인 WPF 확장기 단추 스타일, Visual Studio의 코드 편집기에서 찾은 것과 같은 확장기 스타일을 찾는 데 도움이 필요합니다. 지금까지 나는 이것을 생각해 냈다.+ 및 -

<ControlTemplate x:Key="ExpanderToggleButton" TargetType="ToggleButton">    
       <Border 
        SnapsToDevicePixels="true" 
        Height="12" 
        Name="Border" 
        CornerRadius="0"     
        Margin="2,4" 
        Background="Transparent"      
        BorderBrush="Black"      
        BorderThickness="0.5" >     
       <TextBlock Name="Arrow" Text="+" 
          Foreground="{StaticResource GlyphBrush}" 
          HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      </Border> 
       <ControlTemplate.Triggers>     
       <Trigger Property="IsChecked" Value="true">      
        <Setter TargetName="Arrow" Property="Text" Value="-" /> 
       </Trigger>     
      </ControlTemplate.Triggers> 
     </ControlTemplate> 

이것은 접힌 상태로 보인다.

enter image description here

그것은 분명히 내가 도움이 필요하다 일부 미세 조정을 필요로한다. 내 도전 과제는 정확한 버튼 내용과 수직 정렬을 얻는 것입니다. 첨부 된 그림에서 확장기는 단순히 독 패널에 추가되기 때문에 단추 내용이 지정된대로 중앙에 배치되지 않은 이유를 이해할 수 없습니다.

TIA.

답변

4

다음은 내가 사용하는 스타일입니다. 템플릿을 공유하기위한

<Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton"> 
    <Setter Property="Focusable" Value="False"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ToggleButton"> 
      <Grid Width="14" Height="14"> 
       <Rectangle Fill="{DynamicResource primaryBackgroundBrush}" /> 
       <Border Name="ExpandBorder" RenderOptions.EdgeMode="Aliased" BorderBrush="Black" BorderThickness="2"> 
        <Path RenderOptions.EdgeMode="Aliased" Name="ExpandPath" Stroke="Black" Margin="0" StrokeThickness="2" Data="M 5 1 L 5 9 M 1 5 L 9 5" /> 
       </Border> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Data" TargetName="ExpandPath" Value="M 1 5 L 9 5"/> 
       </Trigger> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter TargetName="ExpandBorder" Property="BorderBrush" Value="Gray" /> 
        <Setter TargetName="ExpandPath" Property="Stroke" Value="Gray" /> 
        <Setter Property="Data" TargetName="ExpandPath" Value=""/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

+0

감사합니다. primaryBackgrounBrush는 무엇으로 구성되어 있습니까? –

+1

이것은 사용자의 테마를 기반으로 설정되는 동적 리소스입니다. 지금 보니 컨트롤의 경계선 배경으로 이동할 수 있다는 것을 알았습니다. – Brady

+1

대단히 고마워요. 그러나 테두리와 직사각형 두께를 1로 줄이면 직사각형이 더 이상 가운데에 맞춰지지 않는 등 약간의 기발함이 있습니다. –