2011-09-19 41 views
5

我有一個用戶控件,我想在其他項目中使用它。當我直接給它的屬性設置一些值時沒有問題:關於在WPF上應用樣式的問題UserControl

<local:MyUserControl prop1="val1" prop2="val2"> 
    ... 
</local:MyUserControl> 

但我無法對它應用樣式。我試過了:

<Window ...> 
    <Window.Resources> 
     <Style x:Key="MyUserControlStyle" TargetType="{x:Type local:MyUserControl}"> 
      <Setter Property="prop1" Value="val1"/> 
      <Setter Property="prop2" Value="val2"/> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <local:MyUserControl Style="{StaticResource ResourceKey=MyUserControlStyle}"> 
      ... 
     </local:MyUserControl> 
    </Grid> 
</Window> 

我哪裏錯了? - 感謝

+0

嗨親愛的@Mario!我糾正了這一點。 - 感謝 – Mimi

+0

您是否看到錯誤,或者您是否僅僅看不到自己的風格? –

+0

@Dan我的用戶控件是一個滾動查看器,在其子節點的每個需要側顯示一個動畫箭頭形狀的按鈕。當我應用風格時,箭頭形按鈕消失。 (在設計時和運行時,我都沒有收到任何錯誤。) – Mimi

回答

5

使用親愛的@Mario Vernari的指示,我發現問題是由於我用來創建UserControl的錯誤策略。我想創建一個能夠保存其他一些的UserControl。所以,我曾試圖這樣的:

<UserControl x:Class="MyNamespace.MyUserControl" 
      ... 
      Style="{DynamicResource ResourceKey=MyUserControlStyle}"> 
    <UserControl.Resources> 
     ... 
     <Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type UserControl}"> 
         <Border BorderBrush="{Binding Path=DP1}"> 
          ... 
          <ContentPresenter ... Content="{TemplateBinding Content}"/> 
          ... 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Resources> 
</UserControl> 

哪裏DP1Brush類型的依賴項屬性。如果您直接設置其屬性(如DP1),則通過此方式創建的用戶控件可以正常工作。這絕對不是真實的方式@Mario告訴我:

...當你使用一個用戶控件,這意味着你已經知道其佈局,也沒有必要進一步風格的控制。相反

,你應該使用CustomControl;:你是在同一時間從而導致碰撞界定其風格兩次...

他補充定義主題文件夾中的默認樣式(如果您擁有常規Visual Studio,它會自動生成)。之後,您可能會覆蓋您自己的應用中的默認樣式。以同樣的方式,你會做一個正常的基類和派生。

關注這個: http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...

顯然,在這種情況下,我們需要從ContentControl類(而不是Control類)得出我們無外觀的控制。你可以看看this & this來掌握細節。

在這裏,我再次感謝@Mario。 ;)

0

您正在給Style="{StaticResource ResourceKey=MyUserControlStyle}"

這只是 - Style="{StaticResource MyUserControlStyle}"

+0

正如我所料,這對它沒有影響。 – Mimi

+3

@Varun:你給的後一個例子只是第一個簡寫。 'ResourceKey'是'StaticResource' markupextension的默認屬性,所以你不用*來命名它。 –