2016-07-28 6 views
0

Попытка узнать об этом немного, и я застрял на конкретном предмете. Я хочу, чтобы мои кнопки редактировались по размеру и выравниванию, используя предварительно сделанный стиль, который у меня есть. Пример:Стиль загрузки UWP на адаптивном триггере

  <Button Style="{StaticResource ButtonFormat}"> 

     </Button> 

Кнопка имеет стиль, сохраненный в app.xaml стиль записывается так:

<Application.Resources> 
    <Style TargetType="Button" x:Key="ButtonFormat"> 
     <Setter Property="Background" Value="#FF6E1400" /> 
     <Setter Property="Margin" Value="5,5,5,5" /> 
    </Style> 
<Application.Resources> 

Теперь, вот моя дилемма:

Я хочу, чтобы загрузить другой стиль, который перезаписывает «ButtomFormat». Я пытаюсь экспериментировать в VisualStatemanager, чтобы попытаться найти подходящий способ сделать это, но не может найти ничего, что достаточно объясняет мне, как это сделать.

Таким образом, в VisualState такие, как показано ниже:

<VisualState x:Name="BigView" > 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="550" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <!--stuff goes here--> 
        <!--stuff goes here--> 
       </VisualState.Setters> 
      </VisualState> 

Я хочу ooverwrite ButtonFormat с ButtonFormatBlue как таковой:

 <Style TargetType="Button" x:Key="ButtonFormatBlue "> 
     <Setter Property="Background" Value="Blue" /> 
     <Setter Property="Margin" Value="5,5,5,5" /> 
    </Style> 

Я видел, кто-то предполагает, используя C# вместо visualstatemanagers, но я не сделал правильно понять это описание, можно ли загрузить его из visualstatetrigger, как я хочу, или я смотрю на неправильное направление?

Все вспомогательные средства оценены, спасибо заранее!

ответ

0

Я видел, кто-то предполагает, используя C# вместо из visualstatemanagers, но я не правильно понял это описание.

Это означает, что вы можете установить стиль для своего Button вручную в коде позади.Например, вы можете поместить ваш ButtonFormat и ButtonFormatBlue как в ресурсе App, как это:

<Application.Resources> 
    <Style TargetType="Button" x:Key="ButtonFormat"> 
     <Setter Property="Background" Value="#FF6E1400" /> 
     <Setter Property="Margin" Value="5,5,5,5" /> 
    </Style> 
    <Style TargetType="Button" x:Key="ButtonFormatBlue"> 
     <Setter Property="Background" Value="Blue" /> 
     <Setter Property="Margin" Value="5,5,5,5" /> 
    </Style> 
</Application.Resources> 

Тогда ваш Button может быть загружен с ButtonFormat стиле с использованием StaticResource:

<Button x:Name="styleTestButton" Content="Style Sample" Style="{StaticResource ButtonFormat}" 
     VerticalAlignment="Bottom" Click="styleTestButton_Click" /> 

В случае Button кнопки мыши Например, вы можете изменить свой стиль Button следующим образом:

private void styleTestButton_Click(object sender, RoutedEventArgs e) 
{ 
    var ButtonFormatBlue = Application.Current.Resources.FirstOrDefault(r => r.Key.ToString() == "ButtonFormatBlue"); 
    styleTestButton.Style = ButtonFormatBlue.Value as Style; 
} 

Или вы можете полностью определить новый стиль в коде позади и установить этот стиль Button с помощью C# в коде позади:

private void styleTestButton_Click(object sender, RoutedEventArgs e) 
{ 
    var dynamicStyle = new Style(); 
    dynamicStyle.TargetType = typeof(Button); 
    dynamicStyle.Setters.Add(new Setter(BackgroundProperty, Colors.Blue)); 
    dynamicStyle.Setters.Add(new Setter(MarginProperty, new Thickness(5, 5, 5, 5))); 
    styleTestButton.Style = dynamicStyle; 
} 

нужно знать, что, как сказал @MZetko, мы не можем переопределить ресурс, поэтому мы создали новую.

можно ли загрузить его с визуального устройства, как я хочу, или я смотрю на неправильное направление?

Да, это возможно, но трудно сказать, смотрели ли вы на неправильное направление, это зависит от разных сценариев. Например, если ваши UIElements находятся в DataTemplate, то это не работает с StateTriggers, привязка данных является лучшим решением для этого сценария. Вы можете обратиться к Замечания от VisualStateManager class, он показывает отличную информацию об использовании VisualStateManager.

+0

Какова была бы ваша рекомендация, если у меня есть 10 кнопок, и они нуждаются в изменении размера + изменение цвета на определенной ширине, просто примените имя к каждому из них и пойдите для него? – Eilytres

+0

@ Eilytres, используя 'VisualStateManager' с' AdaptiveTrigger'. –

1

Вы не можете переопределить ресурс, но вы можете изменить свойство стиля Button.

Вы должны сначала дать кнопку имя:

<Button x:Name="MyButton" Style="{StaticResource ButtonFormat}"> 
</Button> 

И теперь вы можете использовать VisualStateManager изменить Style свойство:

<VisualState x:Name="BigView"> 
    <VisualState.StateTriggers> 
     <AdaptiveTrigger MinWindowWidth="550" /> 
    </VisualState.StateTriggers> 
    <VisualState.Setters> 
     <Setter Target="MyButton.Style" 
       Value="{StaticResource ButtonFormatBlue}" /> 
    </VisualState.Setters> 
</VisualState> 
+0

Что делать, если у меня есть 5 кнопок, которые я хочу редактировать так же? Я имею в виду, если у меня есть 5 кнопок, и я хочу, чтобы все они стали синими, когда была достигнута определенная ширина, мне нужно указать каждой кнопке определенное имя и повторить этот шаг 5 раз? – Eilytres

+0

Я думаю, что это выглядит довольно многообещающим как универсальное решение, которое автоматически заменит стили, не указывая вручную :-) - http://dotnetbyexample.blogspot.cz/2016/01/using-style-replacing-behavior- for.html –

 Смежные вопросы

  • Нет связанных вопросов^_^