Zanim odpowiesz, spójrz na this post.Jak powiązać z wartością pustą wewnątrz szablonu w Universal Windows App?
Uzyskanie odpowiedzi na to pytanie może rozwiązać problem poniżej.
Jest to problem, który zaczął się w systemie Windows 10 (aplikacje uniwersalne). W Windows 8.1 i każdej innej technologii XAML ta technika działała bez zarzutu. Oto konfiguracja w pustym uniwersalnej aplikacji projektu:
1. Statyczne klasy z dołączonym Własności
utworzyć klasę, która mieści załączony właściwość typu Brush
. Umieść to w dowolnym miejscu w projekcie.
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. Dodaj formant do MainPage.xaml użyciu dołączonego właściwość
Na stronie głównej, dodać ContentControl
z szablonu niestandardowego, który ma Grid
z jego kolor tła ustawiony na akcent szczotka. Pędzel akcentowy jest ustawiony w stylu.
<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>
Jeśli teraz uruchomisz aplikację, pojawi się ona na zielonym tle. Wszystko działa poprawnie. Jeśli jednak ustawisz wartość jako {x:Null}
, zgłasza wyjątek.
<Page.Resources>
<Style x:Key="MyControl"
TargetType="ContentControl">
<Setter Property="local:MySettings.AccentBrush"
Value="{x:Null}" /> <!-- Null value here -->
</Style>
</Page.Resources>
Czy ktoś chciałby zrobić zdjęcie?
Jak o próbie 'Brush?' Zamiast 'Brush' . –
'Pędzel' jest klasą. 'Nullable' odnosi się tylko do struktur. –
Laith
Dlaczego chcesz ustawić wartość jako null? – Lance