Как получить доступ к элементам, которые были динамически назначены элементу управления в форме ресурса XAML? - PullRequest
1 голос
/ 14 марта 2011

В моем окне есть следующий ресурс, который объявляет, как должен выглядеть определенный вид TabItem.

<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();


    }

Я хочу получить доступ к кнопке btnSearch, которая объявлена ​​в моем ресурсе XAML.

Как таковой, этот код вызывает исключение, поскольку btnGo оказывается нулевым (равно как и i), поскольку он не может найти ожидаемый элемент управления с помощью FindName ().
Я читал о методе RegisterName (), но он требует ссылки на экземпляр необходимого элемента управления ... которого у меня нет.

1 Ответ

0 голосов
/ 14 марта 2011

Я не думаю, что вы должны определять свою кнопку таким образом, попробуйте определить ее в стиле, создать кнопку и назначить кнопке этот стиль, я думаю, вы сможете получить то, что вы собираетесь для этого пути.

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}";

Надеюсь, это поможет, Имон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...