2017-08-08 29 views
3

使用UWP(或WPF),我在我的XAML樣式中添加了x:Name。 和Style對x:name完全不起作用。爲什麼?UWP:如何避免Templete控件開發中的樣式名稱(x:Name)?

現在,我正在開發一個模板控件。要使用「SetValue」更改樣式屬性,我必須在我的樣式上添加名稱。然後我添加名稱x:Name =「MyStyleName」,但它會造成問題。

這是一個簡單的示例代碼,其中包含Style x:Name。

<Grid Background="Black" Width="200" Height="200" > 

     <Grid.Resources> 
      <Style x:Name="MyStyleName" TargetType="Ellipse"> 
       <Setter Property="Height" Value="100" /> 
       <Setter Property="Width" Value="100" /> 
       <Setter Property="Stroke" Value="Red"/> 
      </Style> 
     </Grid.Resources> 

     <Ellipse x:Name="Circle1" /> 
     <Ellipse x:Name="Circle2" /> 

    </Grid> 

enter image description here

,我添加X的主要原因是:在樣式名稱,在模板控制的發展,我想通過名稱來訪問的風格。

 var _grid = this.GetTemplateChild(GRID_NAME) as Grid; 
     if (_grid != null) 
     { 
      // change grid margin. 
      _grid.Margin = new Thickness(0, 5, 0, 0); 

      // get Style of Grid 
      var _gridStyle = _grid .Resources[GRID_STYLE_NAME] as Style; 
      if(_gridStyle != null) 
      { 
       // Change Gird Height as STYLE ! 
       _gridStyle.SetValue(FrameworkElement.HeightProperty, 10); 

      } 
     } 

有沒有什麼好的方法可以避免Style x:Name ??

回答

2

您需要使用x:Key代替資源。它主要是ResourceDictionary內的標識符。

但是我們可以改進嗎?因爲我不推薦這樣的硬編碼字符串。如果使用控件的開發人員不知道他需要指定該樣式,該怎麼辦?

對此的解決方案是在你的控制,以創建類型Style依賴屬性的GridStyle,並將其綁定到現有的風格在你的XAML文件(例如,您的Generic.xaml主題,你把默認樣式文件夾控制)。這樣,其他開發人員也可以自由應用自己的Grid風格。

+1

你的回答,我得到答案,謝謝!我必須添加「StaticResource」

+0

也看看我更新的答案,通常它應該如何完成。 :) –