2015-09-28 21 views
7

Yanıt vermeden önce, this post'a bakın.Evrensel Windows uygulamasında şablon içindeki boş değere nasıl bağlanabilirim?

Bunun için bir yanıt almak, aşağıdaki sorunu çözebilir.


Bu sadece Windows'un 10 (Evrensel Uygulamaları) ile başlayan bir sorundur. Windows 8.1'de ve diğer her XAML teknolojisinde, bu teknik kusursuz bir şekilde çalıştı. Ekli Mülkiyet

tip Brush bir ekli özelliği barındıran bir sınıf oluşturun ile

1. Statik sınıfı: Burada boş bir evrensel uygulama projesinde tuzak. Bunu projenin herhangi bir yerine koyun.

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.

aksanıyla ayarlı onun arka plan rengiyle bir Grid sahip özel bir şablonla bir ContentControl ekleyin ana sayfasında ekli özelliği

kullanarak MainPage.xaml bir denetimi ekleyin fırça. Aksanlı fırça bir stilde ayarlanır.

<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> 

Uygulamayı şimdi çalıştırırsanız, yeşil bir arka plan ile görünür. Herşey çalışıyor. Ancak, değeri {x:Null} olarak ayarlarsanız, bir istisna atar.

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

Bu konuda şüphe çekmek isteyen var mı?

+0

bağlantı vermenizi stil kullanımda

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

sonra kaynak dosyasında, sonuçlar verdiğini saptadık?' Yerine Brush' 'arasında . –

+0

'Fırça' bir sınıftır. 'Nullable ' yalnızca yapılara uygulanabilir. – Laith

+0

Değeri null olarak niçin ayarlamak istersiniz? – Lance

cevap

2

Kayıt için, bu sorun giderilmiş gibi görünüyor. Projem, Universal Windows 10.0.10240.0 sürümüne başvuruyor. Fırça, orijinal posterin açıklandığı şekilde {x: Null} olarak ayarlanması beklendiği gibi çalışır.

0

Sahte ekli özelliği ekleyebilirsiniz:

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 
     ); 

Ve özellik ayarlayıcı bağlamak:

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

ızgara Arkaplan (NullAccentBrush bağlayıcı hiçbir gerçek olsa bile boş ...).

0

Bu kod Nasıl `Brush çalışırken yaklaşık BgNull

<Setter Property="Background" Value="{StaticResource BgNull}"/> 
İlgili konular