как мне получить программный доступ к этому ресурсу WPF XAML? - PullRequest
15 голосов
/ 24 сентября 2010

как мне получить программный доступ к этому ресурсу WPF XAML?

<Grid.Resources>
<Style x:Key="lineDataPointStyle" TargetType="chartingToolkit:LineDataPoint">
                        <Setter Property="Background" Value="DarkGreen"/>
                        <Setter Property="IsTabStop" Value="False"/>
                        <Setter Property="Template" Value="{x:Null}"/>
                    </Style>
</Grid.Resources>

и вот код, из которого я хочу получить к нему доступ.Примечание. Мне нужно программно создать строки:

 // New Assoicated Graph Series
                var lineSeries = new LineSeries();
                lineSeries.ItemsSource = newSeriesCollection;
                lineSeries.IndependentValuePath = "Second";
                lineSeries.DependentValuePath = "Kb";
                lineSeries.Title = kvp.Key;
                lineSeries.DataPointStyle = (Style) this.Resources["lineDataPointStyle"];  // ** DOES NOT WORK

Ответы [ 2 ]

21 голосов
/ 24 сентября 2010

Я не уверен относительно пути к Решетке, на который вы ссылаетесь в своем xaml; однако, учитывая это xaml:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:WpfApplication1"
    Title="Test Application - ListView" Height="300" Width="300">
    <Window.Resources>
        <src:OrderStateConverter x:Key="orderStateConverter"/>
        <DataTemplate x:Key="checkbox">
            <CheckBox IsChecked="{Binding XPath=@State, Converter={StaticResource orderStateConverter}}" 
                  Margin="0,1,1,1" >
            </CheckBox>
        </DataTemplate>
        <DataTemplate x:Key="headerButton">
            <Button/>
        </DataTemplate>
    </Window.Resources>
    <StackPanel>
        <ListView Height="Auto" 
                  Name="listView1" 
                  Width="Auto" 
                  ItemsSource="{Binding Source={StaticResource myXmlDatabase},XPath=Item}">
            <ListView.Resources>
                <DataTemplate x:Key="checkbox2">
                    <CheckBox IsChecked="{Binding XPath=@State, Converter={StaticResource orderStateConverter}}" 
                  Margin="0,1,1,1" >
                    </CheckBox>
                </DataTemplate>
            </ListView.Resources>
        </ListView>
    </StackPanel>
</Window>

и следующий код извлечет ресурс как из окна, так и из ListView:

    public void SomeMethod() {
        Object res1 = this.Resources["checkbox"];
        Object res2 = this.listView1.Resources["checkbox2"];
        return;
    }

В этом случае метод находится в коде окна позади класса

5 голосов
/ 31 января 2016

FrameworkElement класс имеет открытый объект FindResource (объект resourceKey); метод. Используйте этот метод для поиска ресурсов.

Причина this.Resources["checkbox"] не даст вам ресурс, если он определена иерархия ресурсных словарей и ресурсов приложения Но this.FindResource("checkbox"); тоже будет работать там.

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