2008-10-07 5 views
2

나는 다음과 같은 의사 XAML 코드로 표시 할 수있는 UserControl을 (복합 제어)이 있습니다전송 종속성 ​​속성 값이

<UserControl> 
    <DockPanel> 
    <TextBox /> 
    <Button /> 
    </DockPanel> 
</UserControl> 

내가 한 무리의이 사용자 지정 컨트롤을 사용합니다 WPF 스타일로 그 중 일부를 배치하고 스타일을 지정하십시오. 이 스타일은 UserControl의 Background 속성을 색상으로 설정합니다. 그러나이 배경색은 UserControl의 배경 화면에 그려지지만 TextBox 컨트롤의 배경에만 그리기를 원합니다.

alt text http://img261.imageshack.us/img261/8600/62858047wi3.png

내 TextBox 컨트롤의 배경 속성에 해당 UserControl의 배경 속성을 결합하면, 내가 하나를 다음 얻을 :

alt text http://img111.imageshack.us/img111/1637/30765795kw5.png

이것은 내가 (색상 = 레드) 무엇을 얻을

이제 내부 TextBox 컨트롤의 배경을 칠하지만 UserControl의 배경색은 여전히 ​​존재합니다. UserControl의 배경 그림을 제거 할 수있는 방법이 있습니까?

답변

5

이렇게하는 방법에는 여러 가지가 있지만 사용자 정의 컨트롤에 자신의 속성을 표시하고 사용자 정의 컨트롤 내부에 바인딩하는 것이 좋습니다. 예를 들어 :

<UserControl x:Name="_root" ...> 
    ... 
    <Button Background="{Binding ButtonBackground, ElementName=_root}"/> 
</UserControl> 

또 다른 방법은 명시 적으로 뭔가에 TextBox의 배경색을 설정하는 것입니다.

1

나는 Kent와 동의한다. 이 문제를 해결할 수있는 방법은 여러 가지가 있습니다.

하지만 UserControl의 스타일을 사용하여 TextBox의 배경을 설정하는 방법은 무엇입니까? 다음과 같은 특별한 이유가 있습니까? 당신이 진정으로 사용자 정의 컨트롤의 속성 세트를 활용하고자하고, 사용자 컨트롤의 내부에 영향을 미치는 경우

<UserControl 
    x:Class="StackOverflowQuestion.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300" 
    Width="300" 
> 
    <UserControl.Resources> 
     <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}"> 
      <Setter Property="Background" Value="Red"/> 
     </Style> 
    </UserControl.Resources> 
    <DockPanel> 
     <TextBox Text="Test" Style="{StaticResource textBoxStyle}"/> 
     <Button/> 
    </DockPanel> 
</UserControl> 

, 나는 하나의 수정과 켄트의 제안을 따를 것입니다. 대신 TextBox의 배경을 바인딩하여 사용자 컨트롤에서 사용자가 설정 한 배경 브러시 (속성 값 상속)가 Button에 전달되도록합니다. 또는, 다른 말로, TextBox의 Background는 실제로 당신이 다른 것을 만들려고 노력하는 것입니다.

<UserControl x:Name="_root" ...> 
    <TextBox Background="{Binding TextBoxBackground, ElementName=_root}"/> 
    <Button/> 
</UserControl>