2015-09-28 5 views
7

Bevor Sie antworten, sehen Sie sich this post an.Wie kann ich innerhalb einer Vorlage in einer Universal Windows App an einen Nullwert binden?

Wenn Sie zuerst eine Antwort erhalten, kann das Problem möglicherweise behoben werden.


Dies ist ein Problem, das mit Windows 10 (Universal Apps) begonnen. In Windows 8.1 und jeder anderen XAML-Technologie funktionierte diese Technik einwandfrei. Hier ist die Einrichtung in einem leeren Universal-App-Projekt:

1. Statische Klasse mit angebrachtem Property

Erstellen Sie eine Klasse, die einen angefügten Eigenschaft des Typs beherbergt Brush. Setzen Sie dieses irgendwo in das Projekt ein.

public static class MySettings 
{ 
    public static Brush GetAccentBrush(DependencyObject d) 
    { 
     return (Brush)d.GetValue(AccentBrushProperty); 
    } 

    public static void SetAccentBrush(DependencyObject d, Brush value) 
    { 
     d.SetValue(AccentBrushProperty, value); 
    } 

    public static readonly DependencyProperty AccentBrushProperty = DependencyProperty.RegisterAttached(
     "AccentBrush", 
     typeof(Brush), 
     typeof(MySettings), 
     null 
     ); 
} 

2. ein Steuerelement Ihrer MainPage.xaml hinzufügen

In der Haupt-Seite aufgeführten Eigenschaft verwendet, ein ContentControl mit einer benutzerdefinierten Vorlage hinzufügen, die ein Grid mit seiner Hintergrundfarbe auf den Akzent gesetzt hat Bürste. Der Akzentpinsel ist in einem Stil gesetzt.

<Page x:Class="UniversalTest.MainPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="using:UniversalTest" 
     mc:Ignorable="d"> 
    <Page.Resources> 
     <Style x:Key="MyControl" 
       TargetType="ContentControl"> 
      <Setter Property="local:MySettings.AccentBrush" 
        Value="Green" /> <!-- Setting value here --> 
     </Style> 
    </Page.Resources> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

     <ContentControl Style="{StaticResource MyControl}"> 
      <ContentControl.Template> 
       <ControlTemplate TargetType="ContentControl"> 
        <Grid Background="{TemplateBinding local:MySettings.AccentBrush}"> <!-- Using value here --> 
         <TextBlock Text="Howdy World!" /> 
        </Grid> 
       </ControlTemplate> 
      </ContentControl.Template> 
     </ContentControl> 

    </Grid> 
</Page> 

Wenn Sie die App jetzt ausführen, wird sie mit einem grünen Hintergrund angezeigt. Funktioniert alles. Wenn Sie jedoch den Wert {x:Null} festlegen, wird eine Ausnahme ausgelöst.

<Page.Resources> 
    <Style x:Key="MyControl" 
      TargetType="ContentControl"> 
     <Setter Property="local:MySettings.AccentBrush" 
       Value="{x:Null}" /> <!-- Null value here --> 
    </Style> 
</Page.Resources> 

Möchte jemand eine Aufnahme machen?

+0

Wie wäre es versucht, 'Pinsel?' Statt 'Brush' zu BgNull verlinken . –

+0

'Brush' ist eine Klasse. 'Nullable ' ist nur auf Strukturen anwendbar. – Laith

+0

Warum möchten Sie den Wert als null setzen? – Lance

Antwort

2

Für die Aufzeichnung scheint dieses Problem behoben worden zu sein. Mein Projekt verweist auf Universal Windows Version 10.0.10240.0. Das Festlegen des Pinsels auf {x: Null} wie vom ursprünglichen Poster beschrieben funktioniert wie erwartet.

0

Sie können eine Fälschung angefügten Eigenschaft hinzufügen:

public static Brush GetNullAccentBrush(DependencyObject d) 
    { 
     return (Brush)d.GetValue(NullAccentBrushProperty); 
    } 

    public static void SetNullAccentBrush(DependencyObject d, Brush value) 
    { 
     d.SetValue(NullAccentBrushProperty, value); 
    } 

    public static readonly DependencyProperty NullAccentBrushProperty = DependencyProperty.RegisterAttached(
     "NullAccentBrush", 
     typeof(SolidColorBrush), 
     typeof(MySettings), 
     null 
     ); 

und binden Ihre Immobilie Setzer:

<Setter Property="local:MySettings.AccentBrush" 
     Value="{Binding local:MySettings.NullAccentBrush}" /> 

Das Gitter Hintergrund ist null (auch wenn es keine wirkliche ist auf NullAccentBrush Bindung ...).

0

ich gefunden habe, dass dieser Code funktioniert, in Ressourcendatei

<Color x:Key="BgNull"></Color> 

dann in Ihrem Stil verwenden, die

<Setter Property="Background" Value="{StaticResource BgNull}"/> 
Verwandte Themen