2015-11-05 77 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