2016-11-18 51 views
2

I'm目標的UWP XAML更改樣式:使用樣式自定義組件我用VisualStateManager

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <StackPanel.Resources> 
      <Style TargetType="Button"> 
      <Setter Property="Height" Value="80"/> 
      <Setter Property="Width" Value="80"/> 
      <Setter Property="Margin" Value="10"/> 
      </Style> 
     </StackPanel.Resources> 

     <Button Content="Listas"/> 
     <Button Content="Filas"/> 
     <Button Content="Pilhas"/> 
    </StackPanel> 

    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStateGroup"> 
      <VisualState x:Name="VisualStatePhone"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="0"/> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
      </VisualState.Setters> 
     </VisualState> 
     <VisualState x:Name="VisualStateTablet"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="600"/> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="Button.Width" Value="100"/> 
      </VisualState.Setters> 
     </VisualState> 
     <VisualState x:Name="VisualStateDesktop"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="800"/> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="Button.Width" Value="200"/> 
      </VisualState.Setters> 
     </VisualState> 
    </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
</Grid> 

但我不知道如何改變一個風格與VisualStateManager。我想在按鈕,TextBlocks等目標上應用樣式,然後更改該樣式的屬性。

+0

你可以擴展你試圖改變什麼樣式嗎?你是否想要改變Style中的某個值,或者是否想換掉另一個Style? –

+0

這兩個選項都有效,@JamesCroft。但我寧願改變一個Style的值。 –

回答

1

我不知道任何方式,你可以達到按鈕樣式,並改變它。但是,如果你願意創建按鈕的一個完整的模板,可以在模板本身添加VisualStateGroups:這只是一個quicke醜陋的模板,我做了

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <StackPanel.Resources> 
      <Style TargetType="Button"> 
       <Setter Property="Height" Value="80"/> 
       <Setter Property="Margin" Value="10"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="Button"> 
          <Grid x:Name="buttonGrid" Width="80"> 
           <VisualStateManager.VisualStateGroups> 
            <VisualStateGroup x:Name="VisualStateGroup"> 
             <VisualState x:Name="VisualStatePhone"> 
              <VisualState.StateTriggers> 
               <AdaptiveTrigger MinWindowWidth="0"/> 
              </VisualState.StateTriggers> 
             </VisualState> 
             <VisualState x:Name="VisualStateDesktop"> 
              <VisualState.StateTriggers> 
               <AdaptiveTrigger MinWindowWidth="800"/> 
              </VisualState.StateTriggers> 
              <VisualState.Setters> 
               <Setter 
                Target="buttonGrid.Width" 
                Value="200" /> 
              </VisualState.Setters> 
             </VisualState> 
            </VisualStateGroup> 
           </VisualStateManager.VisualStateGroups> 
           <Border BorderThickness="2" BorderBrush="Blue"> 
            <ContentPresenter 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
            /> 
           </Border> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </StackPanel.Resources> 

     <Button Content="Listas" /> 
     <Button Content="Filas" /> 
     <Button Content="Pilhas" /> 
    </StackPanel> 
</Grid> 

;您想要從default button template開始。

+0

太棒了,但我如何改變寬度和高度。如果我有更多的財產要改變,我是否必須爲每個財產做所有這種結構?這似乎不是一個好的解決方案,但謝謝! –

+0

這個例子確實改變了寬度,參見。 'buttonGrid.Width'的'Setter'。你想要爲每個你想改變的房產設置一個'Setter'。 我同意這個解決方案是不完美的,因爲你試圖完成什麼,但我沒有看到任何更好的。 –