2015-03-25 2 views
0

В моем проекте я использую Extended WPF Toolkit. Мне пришлось переопределить стиль по умолчанию для WatermarkTextBox. На первый взгляд это было нормально - запуск приложений и стиль применяется, но когда я смотрю на дизайнера - все органы управления, кроме WatermarkTextBox применили конструкции и WatermarkTextBox не имеет]Стиль управления WPF не применяется во время разработки

Мой словарь файл ресурсов:.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 
       xmlns:wpf="clr-namespace:System.Windows;assembly=PresentationFramework" 
       xmlns:system="clr-namespace:System;assembly=mscorlib" 
       xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"> 

И стиль (все статические ресурсы определяются в том же файле в начале):

<Style x:Key="{x:Type xctk:WatermarkTextBox}" TargetType="{x:Type xctk:WatermarkTextBox}"> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None" /> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="MinWidth" Value="50" /> 
    <Setter Property="MinHeight" Value="34" /> 
    <Setter Property="Height" Value="34" /> 
    <Setter Property="AllowDrop" Value="True" /> 
    <Setter Property="Foreground" Value="{StaticResource DarkGrayBrush}" /> 
    <Setter Property="BorderBrush" Value="{StaticResource GrayBrush}" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="Background" Value="{StaticResource WhiteBrush}" /> 
    <Setter Property="Padding" Value="4,3,4,3" /> 
    <Setter Property="FontFamily" Value="{StaticResource OpenSans}" /> 
    <Setter Property="FontSize" Value="13" /> 
    <Setter Property="FontWeight" Value="Regular" /> 
    <Setter Property="VerticalContentAlignment" Value="Center" /> 
    <Setter Property="HorizontalContentAlignment" Value="Left" /> 
    <Setter Property="MaxLines" Value="1" /> 
    <Setter Property="TextAlignment" Value="Left" /> 
    <Setter Property="WatermarkTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <ContentControl Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" 
           Foreground="{StaticResource GrayBrush}" 
           Focusable="False" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type xctk:WatermarkTextBox}"> 
       <Border Name="Border" 
         CornerRadius="2" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         Background="{TemplateBinding Background}" > 

        <Grid Margin="{TemplateBinding Padding}"> 
         <ScrollViewer x:Name="PART_ContentHost" 
             Panel.ZIndex="10" 
             HorizontalAlignment="Stretch" 
             VerticalAlignment="Stretch" 
             HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" /> 

         <ContentPresenter x:Name="PART_WatermarkHost" 
              Content="{TemplateBinding Watermark}" 
              ContentTemplate="{TemplateBinding WatermarkTemplate}" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              IsHitTestVisible="False" 
              Margin="6,0,0,0" 
              Visibility="Collapsed" /> 
        </Grid> 

        <wpf:VisualStateManager.VisualStateGroups> 
         <wpf:VisualStateGroup x:Name="CommonStates"> 
          <wpf:VisualStateGroup.Transitions> 
           <wpf:VisualTransition GeneratedDuration="0" /> 
          </wpf:VisualStateGroup.Transitions> 
          <wpf:VisualState x:Name="Normal" /> 
          <wpf:VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"> 
             <EasingColorKeyFrame KeyTime="0" Value="{StaticResource DarkBlueColor}" /> 
            </ColorAnimationUsingKeyFrames> 
           </Storyboard> 
          </wpf:VisualState> 
          <wpf:VisualState x:Name="Disabled"> 
           <Storyboard> 
            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"> 
             <EasingColorKeyFrame KeyTime="0" Value="{StaticResource LightGrayColor}" /> 
            </ColorAnimationUsingKeyFrames> 
           </Storyboard> 
          </wpf:VisualState> 
          <wpf:VisualState x:Name="ReadOnly" /> 
         </wpf:VisualStateGroup> 
        </wpf:VisualStateManager.VisualStateGroups> 
       </Border> 

       <ControlTemplate.Triggers> 
        <Trigger Property="Text" Value="{x:Null}"> 
         <Setter TargetName="PART_WatermarkHost" Property="Visibility" Value="Visible" /> 
        </Trigger> 
        <Trigger Property="Text" Value="{x:Static system:String.Empty}"> 
         <Setter TargetName="PART_WatermarkHost" Property="Visibility" Value="Visible" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Я определил мои стили в Styles.xaml файле. и я ссылаюсь на него в каждом файле UserControl. Например:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Styles.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

И я хочу, чтобы применить этот стиль для WatermarkTextBox:

<xctk:WatermarkTextBox Margin="0,0,0,20" Text="{Binding MyField, Mode=TwoWay}"> 
     <xctk:WatermarkTextBox.Watermark> 
      <TextBlock Text="Watermark text" 
         Style="{x:Null}" /> 
     </xctk:WatermarkTextBox.Watermark> 
    </xctk:WatermarkTextBox> 

Итак, как я уже говорил - я вижу стиль применяется во время выполнения, но в VS2013 дизайнер использует стиль по умолчанию для контроля. Я хочу видеть правильный стиль во время разработки. Является ли это возможным?

Существуют ли какие-либо ограничения на размер файла ресурсов такого типа? Мой файл содержит ~ 2000 строк кода XAML и определено около 40 стилей.

ответ

0

Проблема была в несоответствии версии пакетов NuGet. Корневое приложение использовало версию 2.4, а модуль использовал версию 2.3. Это несоответствие также вызвало множество исключений TargetInvocationException и NullReferenceException.

0

Я думаю, вы должны дать свой код ResourceDictionary

к App.xaml. А затем назовите его в UserControl