2012-10-15 5 views
1
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:local="clr-namespace:CuratioCMS.Client.UI.Controls"> 
<Style BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type local:ImageButton}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:ImageButton}"> 
       <StackPanel Height="Auto" Orientation="Horizontal"> 
        <Image Width="20" 
          Height="20" 
          Margin="10,4,0,4" 
          Source="{Binding Path=Image, 
              RelativeSource={RelativeSource TemplatedParent}}" 
          Stretch="Fill" /> 
        <TextBlock Margin="5,0,10,0" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Center" 
           FontSize="12" 
           FontWeight="Bold" 
           Foreground="{TemplateBinding Foreground}" 
           Text="{TemplateBinding Label}" /> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

사용자 정의 컨트롤 템플릿

이하여 ImageButton 사용자 정의 컨트롤에 대한 generic.xaml을 내부의 코드에서 리소스를 찾을 수 없습니다. 예상하지만 자료 부실 버튼 그래서 대신 버튼의 모든 기본 스타일을 상속하는 상속 할 수 없기 때문에 엉이 스타일은 어떤 기본 스타일없이 사용자 지정 컨트롤을 만들고까지

라인 VS 내부
BasedOn="{StaticResource {x:Type Button}}" 

같은 오류를 보여줍니다 어떤 작품 자원 말한다 '{X : 유형 System.Windows.Controls.Button가}'

를 찾을 수 없습니다 내가 원하는 스타일을 달성하는 방법을 모르는이 오류 메시지가 비주얼 스튜디오 편집기 내부에 보여주는이 왜

답변

0

일반 단추 스타일을 기반으로 스타일을 정의합니다 (Generic.xaml 내부에 있음). 그런 다음 스타일의 템플리트를 재정의합니다. 이 방법은 기본 스타일을 덮어 씁니다. 당신이 스타일을 약간 변경하려면

, 당신은 두 가지 옵션을 가지고 :

옵션 1 :

  1. 가 일반 버튼 스타일에 대한 키 (TargetType="{x:Type Button}"으로 generic.xaml을 내 정의 된 스타일을 찾을 수를 제공 및
  2. 는로하여 ImageButton 스타일의 BasedOn 속성을 설정 {StaticResource someName}에 ImageButtons를 제외한 다른 모든 버튼()의 스타일을 설정) 속성에 x:Key="someName"를 추가

옵션 2 : 당신이하여 ImageButton에 그것은 TargetType을 설정하고

  • 변화에 대한 키를 설정 '하지'에 의해
  • 제네릭두고 일반 버튼 스타일의 사본을 만들 수 있습니다

    1. 그것의 원하는 부분.

    옵션 2는 많은 변경 작업을 필요로하지 않기 때문에 일반적으로 더 나은 솔루션이지만, 몇 시간 전에 원했던 작업을 수행 했으므로 중복 된 스타일 코드를 피할 방법을 찾지 못했습니다.

  • +0

    조금 설명 할 수 있습니까? 나는 컨트롤을 무시하는 것이 내가 여기서하고있는 것에 동의한다. 그래서 기본 스타일의 이름을 짓는 것의 의미는 무엇인가? 이것은 사용자 정의 컨트롤이 아니므로 사용자 정의 컨트롤이므로 다른 케이스에 대해 이해하고 있다고 생각합니다 –

    +0

    이전 답변에서 실수를 한 것에 대해 사과드립니다. 더 많은 설명을 추가했습니다. – Bijan

    +0

    괜찮지 만 두 번째 옵션으로 모든 테마 관련 정보를 요청할 것이며 Aero DLL에 대한 참조를 추가하고 Luna 및 다른 Windows 테마에 대한 테마를 정의해야합니다. 그리고 이것은 내가 정말로 원한 것이 아닙니다 –