2014-03-07 39 views
0

我有这样定义的控件模板:如何访问WPF中控件模板内的组合框?

<Window.Resources> 
<ControlTemplate x:Key="fiscalItemsControlTemplate"> 
    <Grid Grid.Column="2"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="17" /> 
       <RowDefinition Height="19" /> 
       <RowDefinition Height="17" /> 
       <RowDefinition Height="19" /> 
       <RowDefinition Height="17" /> 
       <RowDefinition Height="19" /> 
      </Grid.RowDefinitions> 
     <Label Padding="0" Grid.Row="0" Content="{DynamicResource AmmountStr}" HorizontalAlignment="Left" Name="lblAmmount" VerticalAlignment="Bottom" Height="17"/> 
     <TextBox Padding="0" Name="txtAmmount" Grid.Row="1" Height="19" Width="189" HorizontalAlignment="Left" VerticalAlignment="Bottom" Text="{Binding Path=Amount, Converter={StaticResource moneyConverter}}" /> 
     <Label Padding="0" Content="PurchasePrice" Grid.Row="2" Grid.RowSpan="2" Height="17" HorizontalAlignment="Left" Name="lblPurchasePrice" VerticalAlignment="Top" /> 
     <TextBox Padding="0" Grid.Row="3" Grid.RowSpan="2" Height="19" HorizontalAlignment="Left" Name="txtPurchasePrice" VerticalAlignment="Top" Width="189" Text="{Binding Path=PurchasePrice, Converter={StaticResource moneyConverter}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnSourceUpdated=True}" Validation.Error="Validation_Error" PreviewTextInput="NumericOnly" /> 
     <Label Padding="0" Grid.Row="4" Name="lblOrderState" HorizontalAlignment="Left" Content="Order State" Height="17" /> 
     <ComboBox Padding="0" Grid.Row="5" HorizontalAlignment="Left" Name="cbOrderState" Height="19" Width="189" > 
     </ComboBox> 
    </Grid> 
</ControlTemplate> 
</Window.Resources> 

我试图做的是访问组合框“cbOrderState”在代码隐藏,并宣布它的itemssours那里。我知道FindName()方法有一些方法,但在Window.Resources中定义控件模板时如何使用它?

回答

1

您可以使用CollectionViewSource:

<Window.Resources> 
     <CollectionViewSource x:Key="ViewName"/> 
</Window.Resources> 

,并在你的组合框使用:

<ComboBox Padding="0" Grid.Row="5" HorizontalAlignment="Left" Name="cbOrderState" Height="19" Width="189" ItemsSource="{Binding Source={StaticResource ViewName}}" > 

,并在代码隐藏填充数据:

CollectionViewSource yourView = ((CollectionViewSource)(this.FindResource("ViewName"))); 

yourView.Source = yourCollection; 
+0

很不错的。谢谢! – Stojdza

0

首先,这不是一个好练习访问模板,并在你已经绑定已经支持的时候,从代码背后设置它的属性吨。

现在,即使万一你想这样做FindName()是一种方式。您需要从应用此资源的控件访问模板。

假设你有一个组合框声明如下:

<ComboBox x:Name="cmb" Template="{StaticResource fiscalItemsControlTemplate}"/> 

您可以从代码中访问的背后是这样的:

var comboBox = cmb.Template.FindName("cbOrderState", cmb);