Динамически изменить фон границы, установив свойство в xaml - PullRequest
2 голосов
/ 26 января 2012

Я пытаюсь динамически изменить свойство фона границы с именем "Brush2", но получаю следующую ошибку.

Невозможно привести объект типа 'System.Windows.Media.Color'набрать 'System.Windows.Media.Brush'.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Color x:Key="Brush0">#7F605F5F</Color>
    <Color x:Key="Brush1">#7F7E7E7E</Color>

    <Color x:Key="Color2">#7FFDFDFD</Color>
    <SolidColorBrush  x:Key="Brush2" Color="{DynamicResource Color2}" />

    <Color x:Key="Brush3">#7FFFFFFF</Color>
    <Color x:Key="Brush4">#BFFFFFFF</Color>
    <Color x:Key="Brush5">#F2FFFFFF</Color>
    <Color x:Key="Brush6">#FF6096E5</Color>
    <Color x:Key="Brush7">#FF9B7C35</Color>
    <Color x:Key="Brush8">#FFB0BAA1</Color>
    <Color x:Key="Brush9">#7F60605F</Color>
    <Color x:Key="Brush10">White</Color>



    <Style TargetType="{x:Type TabItem}" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <VisualStateManager.VisualStateGroups>


                            <VisualStateGroup x:Name="CommonStates">
                                <!-- silver -->
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush8}"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush8}"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush0}"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush9}"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>


                                <VisualState x:Name="Normal"/>


                                <VisualState x:Name="MouseOver">
                                    <!-- bronze -->
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush7}"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush7}"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush0}"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="border">
                                            <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource Brush9}"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>



                                <VisualState x:Name="Flashing">
                                    <Storyboard>
                                        <DoubleAnimation 
                                            Storyboard.TargetName="BorderGlass"
                                            Storyboard.TargetProperty="Opacity"
                                            From="0.0"
                                            To="1.0"                     
                                            Duration="0:0:0.33"
                                            AutoReverse="True"
                                            RepeatBehavior="Forever"/>
                                    </Storyboard>
                                </VisualState>


                                <VisualState x:Name="Disabled"/>
                            </VisualStateGroup>


                        </VisualStateManager.VisualStateGroups>

                        <Border x:Name="border" BorderThickness="3" CornerRadius="5,5,0,0">
                            <Border.BorderBrush>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush0}" Offset="0"/>
                                    <GradientStop Color="{DynamicResource Brush1}" Offset="1"/>
                                </LinearGradientBrush>
                            </Border.BorderBrush>
                            <Border.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush6}" Offset="0.004"/>
                                    <GradientStop Color="{DynamicResource Brush6}" Offset="0.823"/>
                                    <GradientStop Color="{DynamicResource Brush10}" Offset="0.228"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                        <Border x:Name="BorderGlass" BorderThickness="3" CornerRadius="5,5,0,0" Background="{DynamicResource Brush2}">
                            <Border.BorderBrush>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush3}" Offset="0"/>
                                    <GradientStop Color="{DynamicResource Brush4}" Offset="0.401"/>
                                    <GradientStop Color="{DynamicResource Brush5}" Offset="0.254"/>
                                </LinearGradientBrush>
                            </Border.BorderBrush>
                        </Border>

                        <ContentPresenter HorizontalAlignment="Center" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" ContentSource="Header"/>

                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>



</ResourceDictionary>

Ответы [ 2 ]

0 голосов
/ 26 января 2012

Следующий код работает, но мне пришлось это сделать:

Uri uri2 = new Uri("/Resources/DayModeTab2.xaml", UriKind.Relative);
ResourceDictionary resDict2 = Application.LoadComponent(uri2) as ResourceDictionary;

//Make some changes
MobileApp.Get().Resources.MergedDictionaries.Add(resDict2);

А также моя плохая схема именования вызывала конфликты, так как у меня Brush0 в 2 файлах xaml.

<Border x:Name="BorderGlass" BorderThickness="3" CornerRadius="5,5,0,0" >
  <Border.Background>
    <SolidColorBrush Color="{DynamicResource Color2}" />
   </Border.Background>
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  <GradientStop Color="{DynamicResource Brush3}" Offset="0"/>
  <GradientStop Color="{DynamicResource Brush4}" Offset="0.401"/>
  <GradientStop Color="{DynamicResource Brush5}" Offset="0.254"/>
</LinearGradientBrush>
</Border.BorderBrush>
</Border>
0 голосов
/ 26 января 2012

Что вам нужно сделать, так это установить кисть к объекту типа solidcolor brush.http://msdn.microsoft.com/en-us/library/system.windows.media.solidcolorbrush.aspx

Конструктор принимает цветной объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...