2015-11-05 143 views
0

试图对自定义组合框进行样式设置,结果很痛苦!我用大部分默认组合框样式,如图所示here.自定义组合框样式错误

这里是我的代码,我得到一个错误说:

资源“ComboToggle”无法得到解决。

它应该能够看到它在网格资源中的样式。

XAML

<!-- Combo Box Style --> 
    <Style TargetType="ComboBox"> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="Padding" Value="6,2,25,2" /> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBox"> 
        <Grid> 
         <Grid.Resources> 
          <Style x:Name="ComboToggle" TargetType="ToggleButton"> 
           <Setter Property="Foreground" Value="White" /> 
           <Setter Property="Background" Value="Red" /> 
           <Setter Property="Padding" Value="3" /> 
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate TargetType="ToggleButton"> 
              <Grid> 
               <Rectangle x:Name="Highlight" RadiusX="2" RadiusY="2" Opacity="0" IsHitTestVisible="false" Stroke="#FF6DBDD1" StrokeThickness="1" Margin="{TemplateBinding BorderThickness}" /> 
               <ContentPresenter 
                 x:Name="contentPresenter" 
                 Content="{TemplateBinding Content}" 
                 ContentTemplate="{TemplateBinding ContentTemplate}" 
                 HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                 VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                 Margin="{TemplateBinding Padding}"/> 
               <Rectangle x:Name="FocusVisualElement" RadiusX="3.5" Margin="1" RadiusY="3.5" Stroke="#FF6DBDD1" StrokeThickness="1" Visibility="Collapsed" IsHitTestVisible="false" /> 
              </Grid> 
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </Grid.Resources> 
         <Border x:Name="ContentPresenterBorder"> 
          <Grid> 
           <ToggleButton x:Name="DropDownToggle" 
               Style="{StaticResource ComboToggle}" 
               HorizontalAlignment="Stretch" 
               VerticalAlignment="Stretch" 
               Margin="0" 
               HorizontalContentAlignment="Right" 
               Background="{TemplateBinding Background}" 
               BorderThickness="{TemplateBinding BorderThickness}" 
               BorderBrush="{TemplateBinding BorderBrush}"> 
            <Path x:Name="BtnArrow" Height="4" Width="8" Stretch="Uniform" Data="F1 M 301.14,-189.041L 311.57,-189.041L 306.355,-182.942L 301.14,-189.041 Z " Margin="0,0,6,0" HorizontalAlignment="Right"> 
             <Path.Fill> 
              <SolidColorBrush x:Name="BtnArrowColor" Color="#FF333333"/> 
             </Path.Fill> 
            </Path> 
           </ToggleButton> 
           <ContentPresenter x:Name="ContentPresenter" 
               Margin="{TemplateBinding Padding}" 
               HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
               VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
           </ContentPresenter> 
          </Grid> 
         </Border> 
         <Popup x:Name="Popup"> 
          <Border x:Name="PopupBorder" HorizontalAlignment="Stretch" Height="Auto" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3"> 
           <Border.Background> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#FFFFFFFF" Offset="0"/> 
             <GradientStop Color="#FFFEFEFE" Offset="1"/> 
            </LinearGradientBrush> 
           </Border.Background> 
           <ScrollViewer x:Name="ScrollViewer" BorderThickness="0" Padding="1"> 
            <ItemsPresenter/> 
           </ScrollViewer> 
          </Border> 
         </Popup> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

这是看我试图做:

enter image description here

回答

1

参见:What's the difference between x:Key and x:Name in WPF?

<Style x:Name="ComboToggle" TargetType="ToggleButton"> 

应该

<Style x:Key="ComboToggle" TargetType="ToggleButton"> 

因为{StaticResource ComboToggle}使用ComboToggle作为重点递归搜索父资源字典对于相应的资源。

+0

谢谢,这似乎解决了这个问题,但该按钮不显示,下拉列表显示在查看器中,但不作为运行时,因为没有按钮点击,我搞砸了样式? –

+0

@MartynBall:嗯,它可能不会帮助'ToggleButton.IsChecked'没有绑定任何东西,并且您正在使用Silverlight默认样式。看看[this](https://msdn.microsoft.com/en-us/library/ms752094(v = vs.100).aspx)和[this](http://www.eidias.com/博客/ 2012/2/20 /定制 - WPF的组合框样式)。 – jjj