2015-12-15 3 views
1

Как я могу стилизовать состояние «отключено» моего пользовательского элемента управления? Я не понимаю, как стилизовать различные части пользовательского пользовательского элемента управления. Например, пользовательский пользовательский элемент управления состоит из нескольких компонентов. Итак, как я могу настроить таргетинг на определенные части элемента управления в моей глобальной таблице стилей? Помня о том, что я хочу, чтобы он восстановил первоначальный цвет, если он снова включен.Стиль Пользовательский пользовательский контроль Отключено состояние

Вот мой собственный код пользовательского управления ...

VNode.xaml

<UserControl x:Class="WpfApplication1.VNode" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:WpfApplication1" 
      mc:Ignorable="d" 
      d:DesignHeight="100" d:DesignWidth="200"> 
    <Grid> 
     <Rectangle x:Name="Backplate" Fill="Green" Width="100" Height="50" RadiusX="3" RadiusY="3"/> 
     <Rectangle x:Name="Highlight" 
        Height="60" 
        Width="110" 
        Fill="Transparent" 
        Stroke="White" 
        StrokeThickness="2" 
        RadiusX="6" RadiusY="6"> 
     </Rectangle> 
     <TextBlock x:Name="Label" Text="Label" TextWrapping="Wrap" Width="100" Height="50"/> 
    </Grid> 
</UserControl> 

VNode.xaml.cs

using System.Windows.Controls; 
using System.Windows.Media; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for VNode.xaml 
    /// </summary> 
    public partial class VNode : UserControl 
    { 
     public VNode() 
     { 
      InitializeComponent(); 
     } 
     public Brush BackplateColor 
     { 
      get { return Backplate.Fill; } 
      set { Backplate.Fill = value; } 
     } 
     public string Text 
     { 
      get { return Label.Text; } 
      set { Label.Text = value; } 
     } 
    } 
} 

таблицы стилей

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:WpfApplication1"> 

    <Style x:Key="NodeStyle" TargetType="{x:Type local:VNode}"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Backplate" Value="Red" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

</ResourceDictionary> 
+0

Похоже, вы должны переопределить шаблоны каждого элемента управления в VNode, см. [Http: // stack overflow.com/questions/3751990/how-to-change-disabled-background-color-of-textbox-in-wpf](http://stackoverflow.com/questions/3751990/how-to-change-disabled-background -Колор-оф-текстовое поле-в-МОФ) – jHilscher

ответ

2

Лучше создать или переопределить Style для каждого Control. Это дает вам гибкость для стилей изменения вашего Controls от кода-кода, и это разделение проблем.

Например, давайте посмотрим стиль для TextBlock, который меняет свой стиль в зависимости от IsMouseOver или IsEnabled условий:

В файле App.xaml:

<Application x:Class="UWPWpfApplication.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <Style TargetType="TextBlock" x:Key="VNodeTextBlock"> 
      <Setter Property="FontWeight" Value="Bold" /> 
      <Setter Property="FontSize" Value="8"/> 
      <Style.Triggers> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter Property="Foreground" Value="Red" /> 
       </Trigger> 
       <Trigger Property="IsEnabled" Value="True"> 
        <Setter Property="Foreground" Value="Green" /> 
       </Trigger> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="FontSize" Value="20" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

    </Application.Resources> 
</Application> 

На форме:

<TextBlock Text="Hello World!:)" Style="{StaticResource VNodeTextBlock}"/> 
Смежные вопросы