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?
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.
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.
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.
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 ResourceDictionary
, 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:
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" />
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