2011-03-14 7 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와 마찬가지로)이기 때문에이 코드는 예외를 throw합니다.
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}"; 

희망이 도움이, Eamonn

+0

내가 코드를 통해 새로운 버튼을 생성하고 싶지 않아요. 이미 리소스의 스택 패널에 선언 된 버튼이 있습니다. 이전에 정의 된 버튼에 대한 참조를 얻고 싶습니다. – ForeverLearnNeverMaster

관련 문제