2008-12-30 27 views
34

Tôi có mẫu tùy chỉnh cho trình mở rộng gần với mã bên dưới. Tôi phải thay đổi một số mã để đưa ra các lớp tùy chỉnh, bàn chải, v.v.Làm cách nào để thay đổi FontFamily trên một ContentPresenter?

<Style TargetType="{x:Type Expander}"> 
    <Setter Property="HorizontalContentAlignment" 
      Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" 
      Value="Top" /> 
    <Setter Property="BorderBrush" 
      Value="Transparent" /> 
    <Setter Property="FontFamily" 
      Value="Tahoma" /> 
    <Setter Property="FontSize" 
      Value="12" /> 
    <Setter Property="Foreground" 
      Value="Black" /> 
    <Setter Property="BorderThickness" 
      Value="1" /> 
    <Setter Property="Margin" 
      Value="2,0,0,0" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Expander}"> 
     <Border x:Name="Border" 
       SnapsToDevicePixels="true" 
       Background="White" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       Margin="0,0,0,10" 
       Padding="0" 
       CornerRadius="8"> 
      <DockPanel> 
      <Border x:Name="HeaderSite" 
        Background="Blue" 
        CornerRadius="8" 
        Height="32" 
        DockPanel.Dock="Top"> 
       <DockPanel> 
       <ToggleButton Foreground="White" 
           HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
           VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" 
           Margin="0" 
           MinHeight="0" 
           MinWidth="0" 
           Padding="6,2,6,2" 
           IsChecked="{Binding Path=IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
           DockPanel.Dock="Left"> 
       </ToggleButton>     

       <ContentPresenter SnapsToDevicePixels="True" 
            HorizontalAlignment="Left" 
            Margin="4,0,0,0" 
            ContentSource="Header" 
            VerticalAlignment="Center" 
            RecognizesAccessKey="True" /> 
       </DockPanel> 
      </Border> 
      <Border x:Name="InnerBorder" 
        Margin="0" > 
       <ContentPresenter Focusable="false" 
           Visibility="Collapsed" 
           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
           Margin="{TemplateBinding Padding}" 
           x:Name="ExpandSite" 
           VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
           DockPanel.Dock="Bottom" /> 
      </Border> 
      </DockPanel> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsExpanded" 
        Value="true"> 
      <Setter Property="Margin" 
        TargetName="InnerBorder" 
        Value="5" />   
      <Setter Property="Visibility" 
        TargetName="ExpandSite" 
        Value="Visible" /> 
      </Trigger> 
      <Trigger Property="IsEnabled" 
        Value="false"> 
      <Setter Property="Foreground" 
        Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
      </Trigger>   
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

Như bạn có thể thấy có hai người trình bày nội dung. Tôi muốn người đầu tiên sử dụng Tahoma Bold làm phông chữ thay cho Tahoma mặc định. Tôi có thể làm cái này như thế nào?

Trả lời

45

Bạn cần sử dụng thuộc tính FontWeight để chỉ định phông chữ đậm. Tuy nhiên, bạn có thể nhận thấy rằng ContentPresenter không có thuộc tính đó. Vì vậy, bạn sẽ cần sử dụng thuộc tính đính kèm TextBlock.FontWeight để cho ContentPresenter biết rằng bất kỳ văn bản nào bên trong phải được in đậm.

Hãy thử điều này:

+0

đó đã làm việc một cách hoàn hảo. Cảm ơn bạn đã phản hồi nhanh –

+0

cho trường hợp TextBlock tự động được tạo (liên kết với đối tượng), điều này không hoạt động. sử dụng kiểu thay thế trong ContentPresenter.Resource. nguồn & tín dụng https://stackoverflow.com/a/20117653/1271037 – dovid

7

tôi không thể giúp đỡ về Silverlight, nhưng trong WPF mới 4 nó là TextElement hơn TextBlock

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