Стиль границы WPF вызывает исключение InvalidCastException - PullRequest
0 голосов
/ 06 августа 2020

В моем проекте я создал файл (styles.xaml), который содержит все мои стили, которые я использую в своем приложении. Я попытался создать следующий стиль для своих элементов управления границей.

<DataTemplate x:Key="MyBackgroundTemplate">
    <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
         <GradientStop Color="#FF2A2A2A" Offset="1"/>
         <GradientStop Color="#FF4E4E4E"/>
    </LinearGradientBrush>
</DataTemplate>

<Style x:Key="BorderBackground" TargetType="{x:Type Border}">
    <Setter Property="Background" Value="{DynamicResource MyBackgroundTemplate}"/>
</Style>

В моем файле MainWindow.xaml я использую стиль следующим образом:

<Border Grid.Column="4" BorderBrush="Black" CornerRadius="10" BorderThickness="1" Margin="5" Style="{DynamicResource BorderBackground}"/>

Я получаю следующая ошибка, когда я запускаю свое приложение:

InvalidCastException: невозможно привести объект типа 'System. Windows .DataTemplate' к типу 'System. Windows .Media.Bru sh '.

Подскажите, пожалуйста, что я делаю не так? Как я могу использовать этот стиль в моем файле MainWindow.xaml?

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Как уже указано в ошибке, Background имеет тип Brush, поэтому вы не можете назначить DataTemplate. Удалите теги DataTemplate, измените его имя и обратитесь к нему в своем стиле.

<LinearGradientBrush x:Key="MyBackgroundBrush" EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
   <GradientStop Color="#FF2A2A2A" Offset="1"/>
   <GradientStop Color="#FF4E4E4E"/>
</LinearGradientBrush>

Если вам не нужно повторно использовать LinearGradientBrush, вы можете встроить его в свой стиль.

<Style x:Key="BorderBackground" TargetType="{x:Type Border}">
   <Setter Property="Background">
      <Setter.Value>
         <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
            <GradientStop Color="#FF2A2A2A" Offset="1"/>
            <GradientStop Color="#FF4E4E4E"/>
         </LinearGradientBrush>
      </Setter.Value>
   </Setter>
</Style>
1 голос
/ 06 августа 2020

Если вы настаиваете на использовании привязки ресурса:

<LinearGradientBrush x:Key="MyBackgroundTemplate" EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
     <GradientStop Color="#FF2A2A2A" Offset="1"/>
     <GradientStop Color="#FF4E4E4E"/>
</LinearGradientBrush>

<Style x:Key="BorderBackground" TargetType="{x:Type Border}">
    <Setter Property="Background" Value="{StaticResource MyBackgroundTemplate}"/>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...