У меня возникла очень странная проблема, когда я не вижу пользовательский элемент управления WPF в конструкторе Visual Studio (как если бы он не может найти соответствующий стиль), но стиль правильно отображается в сетке свойств под свойством стиля, отображая ключ: По умолчанию внизу, а также показывает изображение моего элемента управления, стилизованного правильно с соответствующим образом установленным содержимым и текстом.
Я думаю, мой вопрос довольно очевиден, но если мой элемент управления может найти стиль в сетке свойствпочему он не отображается должным образом в конструкторе?
Мой стиль объявлен в файле Themes / Generic.xaml, и я вызываю DefaultStyleKeyProperty.OverrideMetadata(typeof(DragDockPanel), new FrameworkPropertyMetadata(typeof(DragDockPanel)));
в статическом конструкторе моего элемента управления.Однако я заметил, что моя переопределенная функция OnApplyTemplate()
вообще не вызывается.
Вот мой стиль, расположенный в Generic.xaml:
<Style TargetType="local:DragDockPanel">
<Setter Property="Background"
Value="#ff000000" />
<Setter Property="BorderBrush"
Value="#ff333333" />
<Setter Property="BorderThickness"
Value="1" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DragDockPanel">
<Grid>
<local:OuterGlowBorder OuterGlowOpacity="0.4"
OuterGlowSize="15"
CornerRadius="3,3,3,3"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<local:InnerGlowBorder InnerGlowOpacity="1"
CornerRadius="3,3,3,3"
InnerGlowColor="#11ffffff"
InnerGlowSize="15,15,0,0"
Margin="0"
Padding="2"
ClipContent="True"
Background="Transparent"
BorderThickness="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="1"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
<Border Background="#7f000000"
Margin="-2"
Padding="3">
<Grid>
<Border x:Name="GripBarElement"
CornerRadius="3,3,0,0"
Background="#00ffffff"
VerticalAlignment="Top"
MinHeight="30"
Cursor="Hand"
Margin="0,0,32,0"
IsHitTestVisible="{TemplateBinding DraggingEnabled}">
<Grid>
<Rectangle Opacity="0.5">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="6.58300018310547,6.08300018310547"
StartPoint="2.31500005722046,1.81500005722046"
SpreadMethod="Repeat"
MappingMode="Absolute">
<GradientStop Color="#FFAFAFAF"
Offset="0" />
<GradientStop Color="#00FFFFFF"
Offset="1" />
<GradientStop Color="#00FFFFFF"
Offset="0.339" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<ContentPresenter Content="{TemplateBinding Header}"
ContentTemplate="{TemplateBinding HeaderTemplate}" />
</Grid>
</Border>
<ToggleButton x:Name="MaximizeToggleButton"
VerticalAlignment="Top"
HorizontalAlignment="Right"
IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=IsMaximized}"
Margin="0,5,5,0"
Width="20"
Height="20"
Cursor="Hand">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Background="#7F000000"
CornerRadius="2,2,2,2">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused" />
<VisualState x:Name="Unfocused" />
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Disabled" />
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="rectangle"
Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00"
Value="0.6" />
<SplineDoubleKeyFrame KeyTime="00:00:00.2000000"
Value="0.3" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Duration="00:00:00.0010000"
Storyboard.TargetName="rectangle"
Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00"
Value="0.15" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Duration="00:00:00.0010000"
Storyboard.TargetName="checkedArrow"
Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00"
Value="1" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Duration="00:00:00.0010000"
Storyboard.TargetName="uncheckedArrow"
Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00"
Value="0" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unchecked">
<Storyboard />
</VisualState>
<VisualState x:Name="Indeterminate" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid Height="Auto"
Width="Auto">
<Border Margin="0,0,0,0"
BorderBrush="#FFFFFFFF"
BorderThickness="1,1,1,1"
CornerRadius="1,1,1,1"
Width="16"
Height="16">
<Grid>
<Path HorizontalAlignment="Right"
Margin="0,1.24500000476837,1.70700001716614,5.375"
x:Name="uncheckedArrow"
VerticalAlignment="Stretch"
Width="6.752"
Stretch="Fill"
Stroke="#FFFFFFFF"
Data="M0.5,1.005 L6.2509999,1.005 M6.25,6.8800006 L6.25,0.5 M6.2520003,1.0880001 L0.50000024,6.8800001" />
<Path HorizontalAlignment="Stretch"
Margin="1.45899999141693,5.74200010299683,5.78900003433228,0.878000020980835"
x:Name="checkedArrow"
VerticalAlignment="Stretch"
Stretch="Fill"
Stroke="#FFFFFFFF"
Data="M0.5,1.005 L6.2509999,1.005 M6.25,6.8800006 L6.25,0.5 M6.2520003,1.0880001 L0.50000024,6.8800001"
Opacity="0"
RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="180" />
<TranslateTransform />
</TransformGroup>
</Path.RenderTransform>
</Path>
</Grid>
</Border>
<Rectangle Fill="#FFFFFFFF"
RadiusX="2"
RadiusY="2"
Margin="1,1,1,1"
Opacity="0"
x:Name="rectangle" />
</Grid>
</Border>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
</Grid>
</Border>
</Grid>
</local:InnerGlowBorder>
</local:OuterGlowBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<local:DropShadowTextBlock Text="{Binding}"
FontFamily="Verdana"
FontSize="14"
VerticalAlignment="Center"
Margin="5"
DropShadowDistance="3"
DropShadowAngle="45"
Foreground="#ffffffff" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Этот элемент управления использует другие пользовательскиеэлементы управления, которые все объявлены в Generic.xaml, и имеют свой DefaultStyleKeyProperty установлен.Если вы хотите, чтобы я опубликовал стили для этих пользовательских элементов управления, я могу, но для краткости я их пропустил.
Вот как я вызываю элемент управления:
<bl:DragDockPanelHost x:Name="dragDockPanelTest"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Visibility="Visible"
Margin="0,0,0,0">
<bl:DragDockPanel Name="Test1"
Header="TEST"
Content="WHERE AM I?"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Visibility="Visible">
</bl:DragDockPanel>
</bl:DragDockPanelHost>
Любая помощьБуду очень признателен, у меня совершенно нет идей на данный момент.Спасибо!
Редактировать:
Вот еще немного информации, которая может помочь;Я добавил стиль для DragDropPanelHost в свой Generic.xaml, который очень просто меняет цвет фона холста.Тем не менее, цвет фона не изменяется в DragDropPanelHost в конструкторе (после перекомпиляции и т.. По какой-то причине стили вообще не загружаются ...