2015-11-05 5 views
0

Попытка стильного пользовательского ComboBox, оказывается, это боль! Я использовал большую часть ComboBox стиля по умолчанию, как показано here.Пользовательские ошибки стиля ComboBox

Вот мой код, я получаю сообщение об ошибке сказав:

Ресурс «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. Взгляните на [это] (https://msdn.microsoft.com/en-us/library/ms752094 (v = vs.100) .aspx) и [this] (http://www.eidias.com/ Блог/2012/2/20/пользовательская настройка-МОФ-комбо-бокс-стиль). – jjj

Смежные вопросы