2011-03-14 8 views
1

私は、特定の種類のTabItemがどのように見えるかを宣言する以下のリソースを私のウィンドウに持っています。コントロールに動的に割り当てられた要素に、XAMLリソースの形式でアクセスするにはどうすればよいですか?

<Window.Resources> 
    <StackPanel x:Key="TabSearchContents" x:Shared="False" 
    Orientation="Vertical"> 
    <Border 
     BorderThickness="3" 
     BorderBrush="Purple"> 
     <TextBlock 
      Text="SEARCH BOOKS" 
      FontFamily="Verdana" 
      FontSize="25" 
      Foreground="Blue" 
      HorizontalAlignment="Center" /> 
    </Border> 
    <StackPanel 
     Height="30" 
     Orientation="Horizontal" 
     Margin="5"> 

     <TextBox 
      x:Name="txtSearch" 
      Width="650" 
      FontFamily="Comic Sans MS" 
      Foreground="Chocolate" /> 
     <Button 
      x:Name="btnSearch" 
      Width="100" 
      Content="Go!" 
      Click="BtnSearch_Click" /> 
    </StackPanel> 
    <Grid x:Name="gridResults"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="450"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto"> 
     <ItemsControl x:Name="itmsSearch" ItemsSource="{Binding}" Padding="4" 
       ItemTemplate="{StaticResource SearchResultItemDT}">   
     </ItemsControl> 
     </ScrollViewer> 
     <StackPanel x:Name="stkpnlDetails"> 

     </StackPanel> 
    </Grid> 
</StackPanel> 
</Window.Resources> 

私のコードビハインドでは、私は動的にタブを作成し、すでに自分のウィンドウにあるTabControlに割り当てます。

void BtnNewTab_Click(object sender, RoutedEventArgs e) 
    { 
     TabItem tb = new TabItem(); 
     tb.Content = this.Resources["TabSearchContents"];    
     tb.DataContext = _bridge.SearchBooksByTitle("e");   

     tb.Header = "Wuttp yo!"; 
     Button btnGo = ((Button)tb.FindName("btnSearch")); 
     ItemsControl i = (ItemsControl)tb.FindName("itmsSearch"); 
     btnGo.Resources.Add("ResultList", i); 

     daTabs.Items.Add(tb); 
     tb.Focus(); 


    } 

私のXAMLリソースで宣言されているbtnSearchボタンにアクセスします。

このコードでは、FindName()を使用して予期したコントロールを見つけることができないため、btnGoがnull(iと同様)になるため、例外がスローされます。
私はRegisterName()メソッドについて読みましたが、必要なコントロールのインスタンスへの参照が必要です...私は持っていません。

答えて

0

あなたはこのようなボタンを定義する必要はないと思います。スタイルを定義してボタンを作成し、そのスタイルをボタンに割り当てると、あなたはこのようなことを得ることができます。

myTheme.xaml

<ResourceDictionary 
     <Style x:Key="btnSearch" TargetType="{x:Type Button}"> 
      <Setter Property="Width" Value="100"/> 
      <Setter Property="Content" Value="Go!"/> 
      <Setter Property="Click" Value="btn_Click"/> 
     </Style> 
ResourceDictionary/> 

myCode.cs

Button btnGo = new Button; 
btnGo.Style = "{DynamicResource btnSearch}"; 

・ホープ、このことができます、 イーモン

+0

私はコードを新しいボタンを作成する必要はありません。私は既にリソース内のスタックパネルに宣言されたボタンを持っています。以前定義されたボタンへの参照を取得したい。 – ForeverLearnNeverMaster

関連する問題