2013-12-10 78 views
0

我繼承了以下樣式組合框:對組合框項目設置字號

<Style x:Key="CustomComboBox" TargetType="{x:Type ComboBox}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
    <!--<Setter Property="FontSize" Value="64"/>--> 
    <!--<Setter Property="MinWidth" Value="120"/>--> 
    <Setter Property="MinHeight" Value="20"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ComboBox"> 
       <Border x:Name="tst"> 
        <Grid> 
         <ToggleButton 
         Name="ToggleButton" 
         Template="{StaticResource ComboBoxToggleButton1}" 
         Grid.Column="2" 
         Focusable="false" 
         IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" 
         ClickMode="Press"> 
         </ToggleButton> 
         <ContentPresenter 
         Name="ContentSite" 
         IsHitTestVisible="False" 
         Content="{TemplateBinding SelectionBoxItem}" 
         ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
         ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" 
         Margin="3,3,23,3" 
         VerticalAlignment="Center" 
         HorizontalAlignment="Left" /> 
         <TextBox x:Name="PART_EditableTextBox" 
         Style="{x:Null}" 
         Template="{StaticResource ComboBoxTextBox}" 
         HorizontalAlignment="Left" 
         VerticalAlignment="Center" 
         Margin="3,3,23,3" 
         Focusable="True" 
         Background="Transparent" 
         Visibility="Hidden" 
         IsReadOnly="{TemplateBinding IsReadOnly}"/> 
         <Popup 
         Name="Popup" 
         Placement="Bottom" 
         IsOpen="{TemplateBinding IsDropDownOpen}" 
         AllowsTransparency="True" 
         Focusable="False" 
         PopupAnimation="Slide"> 
          <Grid 
          Background="LightGray" 
          Name="DropDown" 
          SnapsToDevicePixels="True"     
          MinWidth="{TemplateBinding ActualWidth}" 
          MaxHeight="{TemplateBinding MaxDropDownHeight}"> 
           <Border 
           x:Name="DropDownBorder" 
           Background="{StaticResource WindowBackgroundBrush1}" 
           BorderThickness="2" 
           BorderBrush="{StaticResource SolidBorderBrush}"/> 
           <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True"> 
            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/> 
           </ScrollViewer> 
          </Grid> 
         </Popup> 
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="HasItems" Value="false"> 
         <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush1}"/> 
        </Trigger> 
        <Trigger Property="IsGrouping" Value="true"> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="True"/> 
        </Trigger> 
        <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true"> 
         <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4"/> 
         <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/> 
        </Trigger> 
        <Trigger Property="IsKeyboardFocused" Value="true"> 
         <Setter Property="BorderBrush" Value="Pink"/> 
         <Setter Property="BorderThickness" Value="3"/> 
        </Trigger> 
        <Trigger Property="IsEditable" 
         Value="true"> 
         <Setter Property="IsTabStop" Value="false"/> 
         <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> 
         <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
    </Style.Triggers> 
</Style> 

如果我改變字號的風格,它只是改變了組合框的大小,而不是裏面的文字的大小。

如果我在ContentPresenter中設置TextElement.FontSize,它沒有任何作用。

我也有我的風格,但在這裏更改FontSize屬性也沒有效果。我也嘗試爲ContentPresenter設置TextElement.FontSize。

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="Background" Value="Black"/> 
    <!--<Setter Property="FontSize" Value="64"/>--> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ComboBoxItem"> 
       <Border 
        Name="Border" 
        Padding="2" 
        SnapsToDevicePixels="true"> 
        <ContentPresenter /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsHighlighted" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="{StaticResource TestBrush}"/> 
        </Trigger> 
        <Trigger Property="IsHighlighted" Value="false"> 
         <Setter TargetName="Border" Property="Background" Value="Black"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我在想什麼?

添加模板:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox" > 
    <Border x:Name="PART_ContentHost" Focusable="False" Background="Black" /> 
</ControlTemplate> 

<ControlTemplate x:Key="ComboBoxToggleButton1" TargetType="ToggleButton"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition Width="20" /> 
     </Grid.ColumnDefinitions> 
     <Border 
       x:Name="Border" 
       Grid.ColumnSpan="2" 
       CornerRadius="2" 
       Background="{StaticResource NormalBrush1}" 
       BorderBrush="{StaticResource NormalBorderBrush}" 
       BorderThickness="1" /> 
     <Border 
        Grid.Column="0" 
        CornerRadius="2,0,0,2" 
        Margin="1" 
        Background="{StaticResource WindowBackgroundBrush1}" 
        BorderBrush="{StaticResource NormalBorderBrush}" 
        BorderThickness="0,0,1,0" /> 
     <Path 
       x:Name="Arrow" 
       Grid.Column="1"  
       Fill="{StaticResource GlyphBrush}" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Data="M 0 0 L 4 4 L 8 0 Z"/> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="ToggleButton.IsMouseOver" Value="true"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource DarkBrush1}" /> 
     </Trigger> 
     <Trigger Property="ToggleButton.IsChecked" Value="true"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush1}" /> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource CollapsedComboBoxColor}" /> 
      <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" /> 
      <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush1}"/> 
      <Setter TargetName="Arrow" Property="Fill" Value="Transparent" /> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="True"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource CollapsedComboBoxColor}" /> 
      <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" /> 
      <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush1}"/> 
      <Setter TargetName="Arrow" Property="Fill" Value="{StaticResource EnabledArrowBrush}" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

你有一個模板,通過'模板的ComboBox.ControlTemplate內設置文本框= 「{StaticResource ComboBoxTextBox}」'這可能會覆蓋您從ComboBoxTemplate中設置的字體。我在示例應用程序中嘗試了沒有TextBox的模板,它的工作原理(意味着文本顯示在字體大小64)。 – sthotakura

+0

我完全刪除了模板屬性,但得到了相同的結果。一個更大的組合框,但文本大小是相同的。 – jpaull

+0

這是正確的,當ComboBox.IsEditable爲true時,該文本框不應該出現在圖片中。因爲,我沒有那個模板和刪除工作,我認爲這是根本原因。對於你來說,它看起來有一些其他的代碼覆蓋了這個值。 – sthotakura

回答

0

我發現我的情況的問題。

還有另一個資源字典文件是樣式TextBlocks。這覆蓋了ComboBox內的文本大小。

任何人都在研究這篇文章中遇到的類似問題,請注意,像這樣的ComboBox有一個底層的TextBlock,它將爲它們選擇爲其定義的樣式。

0

是的,的確如此,ComboBox裏面的TextBox將繼承其他地方設置的樣式。但是,這並不意味着你無能爲力。

當您指定ControlTemplateComboBox風格,包括在ContentPresenterItemsPresenter資源部分適當TextBox風格:

<ControlTemplate TargetType="{x:Type ComboBox}"> 
    <Grid> 
    <Border x:Name="ContentPresenterBorder"> 
     <Grid> 
     <ToggleButton x:Name="DropDownToggle" ClickMode="Press" Template="{StaticResource ...}" Margin="15,0" Background="Transparent" 
      IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" /> 

     <ContentPresenter Name="ContentSite" Content="{TemplateBinding ComboBox.SelectionBoxItem}" ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}" 
      HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="Center" Margin="20,0" IsHitTestVisible="False"> 
      <ContentPresenter.Resources> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="FontSize" Value="16" /> 
       <Setter Property="FontWeight" Value="Bold" /> 
      </Style> 
      </ContentPresenter.Resources> 
     </ContentPresenter> 

     <TextBox x:Name="PART_EditableTextBox" Foreground="White" IsReadOnly="{TemplateBinding IsReadOnly}" Visibility="Hidden" /> 

     <Popup Name="PART_Popup" AllowsTransparency="True" IsOpen="{TemplateBinding ComboBox.IsDropDownOpen}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}"> 
      <Grid Name="DropDown" MinWidth="{TemplateBinding FrameworkElement.ActualWidth}" MaxHeight="{TemplateBinding ComboBox.MaxDropDownHeight}" SnapsToDevicePixels="True"> 
      <Border Name="DropDownBorder"> 
       <ScrollViewer Margin="0"> 
       <ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained"> 
        <ItemsPresenter.Resources> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="FontSize" Value="12" /> 
         <Setter Property="FontWeight" Value="Normal" /> 
        </Style> 
        </ItemsPresenter.Resources> 
       </ItemsPresenter> 
       </ScrollViewer> 
      </Border> 
      </Grid> 
     </Popup> 
     </Grid> 
    </Border> 
    </Grid> 

    <ControlTemplate.Triggers> 
    ... 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
相關問題