2010-12-11 3 views
3

나는 버튼이 있습니다Silverlight : 왜이 ​​스타일이 작동하지 않습니까? 내가 실버 라이트 4를 사용하고

 <Button Click="addTopicButton_Click"> 
      <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
     </Button> 

이 잘 보인다. 내가 설정하려고하면 그러나, 그 ContentStyle 사용하여, 어떤 내용이 나타납니다 :

<Style x:Name="AddButton" TargetType="Button"> 
     <Setter Property="Content"> 
      <Setter.Value> 
       <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" /> 

버튼은 비어 있습니다. 왜 이런거야? 이러한 스타일 Image로 UiElements의를 포함

답변

1

당신은 X를 사용해야합니다. 이러한 개체는 Xaml 구문 분석 중에 스타일이 결합 될 때 한 번만 만들어집니다. UIElements에 대해 이해해야 할 중요한 점은 단일 인스턴스가 시각적 트리에만 한 번 나타날 수 있다는 것입니다. 따라서 코드가 작동하더라도 하나의 버튼에서만 작동하고 다른 버튼은 같은 스타일을 사용하려고하면 실패합니다.

대신이 같은 ContentTemplate 속성을 사용할 수 있습니다 : -

<Style x:Key="AddButton" TargetType="Button"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" /> 

버튼은 이제 버튼의 내용을 렌더링하는 자식 요소를 구성하는 데 사용하는 DataTemplate 주어집니다. 따라서 각 버튼은 Image 컨트롤의 자체 독립 인스턴스를 구성합니다.

+0

전체 답변이 아닐 수도 있지만 문제에 확실히 관련이 있습니다. – ChrisF

5

그것의 좋은 생각 이름 : X보다는 당신의 스타일 요소의 이름을 키 :

0

코드에는 두 가지 변경 사항이 필요합니다.

  1. x:Keyx:Name을 변경, 그리고 당신은 StaticResource를 사용하여, 그것을 사용할 때를 참조하십시오.

  2. 변경 당신 도움이된다면이

    이에

    <Setter.Value> 
         <Image Source="whatever..." /> 
    </Setter.Value> 
    
    ,

    <Setter.Value> 
        <DataTemplate> 
         <Image Source="whatever..." /> 
        </DataTemplate> 
    </Setter.Value> 
    

참조!

관련 문제