2010-12-14 82 views
2

当使控件不可修改时,我们将它们显示为TextBox以保持一致的样式。问题是ComboBox可以具有任何类型的数据,因此绑定ControlTemplate TextBoxText属性不像使用SelectedItem那么简单。WPF - 从样式设置器ControlTemplate内部访问父级控件

<Style TargetType="{x:Type ComboBox}"> 
     <Style.Triggers> 
      <Trigger Property="IsReadOnly" Value="True"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <TextBox Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}, Path=????, Converter={StaticResource ResourceKey=ComboToTextConverter}, UpdateSourceTrigger=PropertyChanged}" /> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

的想法我是使用Converter和发送整个ComboBox因此它可以被Converter代码处理。无论如何要做到这一点?

欢迎任何其他建议!

+0

你有没有得到这个决议? – DRapp 2012-03-23 18:03:51

回答

2

您需要使用SelectedValueSelectedValuePath属性:当你的IsReadOnly属性设置为true的ComboBox

<Style TargetType="ComboBox" x:Key="cStyle"> 
<Style.Triggers> 
    <Trigger Property="IsReadOnly" Value="True"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="ComboBox"> 
      <TextBox Text="{Binding RelativeSource= 
        {RelativeSource TemplatedParent}, 
        Path=SelectedValue}" /> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Trigger> 
</Style.Triggers> 

和继承人你ComboBox

<ComboBox Name="cbox" ItemsSource="{Binding}" 
     Style="{StaticResource cStyle}" 
     SelectedValuePath="SomeText" 
     DisplayMemberPath="SomeText" /> 
现在

,它使用所选值作为i变成TextBox ts文本。