Design-time-tylko kolor tła w WPF?

W WPF XAML jest wygodny DesignHeight i DesignWidth, na przykład w kodzie jako

<UserControl ... d:DesignHeight="500" d:DesignWidth="500" ... />

Co jest świetne, ponieważ mogę zbudować układ z reprezentantem , ale nie zamkniętym , rozmiarem kontrolnym.

Jednak często buduję ciemny interfejs użytkownika, Gdzie etykiety itp. muszą być białe, ale moje kontrolki nadal potrzebują przezroczystego koloru tła. Powoduje to niedogodność w czasie projektowania, ponieważ Biały wydaje się być domyślnym kolorem tła dla przezroczystych elementów sterujących w Projektancie, co prowadzi do nieczytelnych etykiet white-on-white.

Czy istnieje sposób lub Strategia ustawiania koloru tła w czasie projektowania, z podobną wygodą jak DesignHeight / DesignWidth?

Author: DuckMaestro, 2012-01-31

5 answers

Istnieje nieudokumentowana właściwość d:DesignStyle typu Style, którą można ustawić na kontrolerze użytkownika. Ten styl jest stosowany tylko w Projektancie i nie jest stosowany w czasie wykonywania.

Używasz go w ten sposób:

<UserControl ... d:DesignStyle="{StaticResource MyDesignStyle}" />

Lub w ten sposób:

<UserControl ...>
    <d:DesignerProperties.DesignStyle>
        <Style TargetType="UserControl">...</Style>
    </d:DesignerProperties.DesignStyle>
</UserControl>

Należy jednak zauważyć, że każda wartość ustawiona we właściwości Style (tej używanej w trybie runtime) nadpisze również DesignStyle w Projektancie.

 17
Author: Sebastien Pellizzari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 13:18:08

Odkryłem, że możesz zrobić jeden dla siebie. [[1]}Custom design-time attributes in Silverlight and WPF designer to samouczek Jak to zrobić zarówno dla Silverlight jak i WPF.

 9
Author: Oybek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-22 15:22:25

Moja odpowiedź została znaleziona tutaj: czarne tło dla edytora XAML . Istnieje wiele opcji, w tym sprawdzanie System.ComponentModel.DesignerProperties.GetIsInDesignMode(this) w czasie wykonywania.

 8
Author: DuckMaestro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:13

Technika d:DesignerProperties.DesignStyle pokazana na tej stronie świetnie sprawdza się przy stosowaniu WPF design-time-only style do pojedynczej kontroli, ale wydaje się, że nie działa dla Style w ResourceDictionary, które miałyby zastosowanie do wszystkich odpowiednio wpisanych kontrolek lub elementów objętych zakresem słownika. Poniżej znajduje się proste rozwiązanie, które znalazłem, aby wdrożyć styl tylko dla projektantów do ResourceDictionary.

Rozważmy na przykład Window zawierający TreeView, gdzie chcemy, aby TreeViewItem węzły Pokaż jako w pełni rozbudowane-ale tylko w czasie projektowania. Najpierw umieść pożądany styl w słowniku XAML w normalny sposób.

<Window.Resources>
    <Style TargetType="TreeViewItem">
        <Setter Property="IsExpanded" Value="True" />
    </Style>
</Window.Resources>

Tutaj {[3] } jest umieszczony w ResourceDictionary Window, ale oczywiście możesz użyć innego słownika podrzędnego. Następnie, w kodzie C#, Usuń styl z Resource­Dict­ionary, gdy tryb projektowania jest , a nie wykryty. Do this is in the OnInitialized override:

protected override void OnInitialized(EventArgs e)
{
    if (DesignerProperties.GetIsInDesignMode(this) == false)
        Resources.Remove(typeof(TreeViewItem));

    base.OnInitialized(e);
}

Tryb Projektowania:                                                        Tryb Runtime:

Tryb projektowania    tryb runtime

 0
Author: Glenn Slayden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-07 21:55:59

Jest to kompletne rozwiązanie dla DesignBackground:

public class DesignTimeProperties : DependencyObject
    {
        private static readonly Type OwnerType = typeof(DesignTimeProperties);

        #region DesignBackground (attached property)

        public static Brush GetDesignBackground(DependencyObject obj)
        {
            return (Brush)obj.GetValue(DesignBackgroundProperty);
        }

        public static void SetDesignBackground(DependencyObject obj, Brush value)
        {
            obj.SetValue(DesignBackgroundProperty, value);
        }

        public static readonly DependencyProperty DesignBackgroundProperty =
            DependencyProperty.RegisterAttached(
                "DesignBackground",
                typeof (Brush),
                OwnerType,
                new FrameworkPropertyMetadata(Brushes.Transparent,
                    DesignBackgroundChangedCallback));

        public static void DesignBackgroundChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (IsInDesignMode)
            {
                var control = d as Control;
                var brush = e.NewValue as Brush;
                if (control != null && brush != null)
                {
                    control.Background = brush;
                }
            }
        }

        public static bool IsInDesignMode
        {
            get
            {
                return
                    ((bool)
                        DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof (DependencyObject)).DefaultValue);
            }
        }

        #endregion

    }

Użycie:

<UserControl ... infra:DesignTimeProperties.DesignBackground="Black" />
 0
Author: Tal Segal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 07:32:06