Silverlight: доступ к элементу управления XAML из кода - PullRequest
0 голосов
/ 24 января 2011

У меня проблема с доступом к элементу управления Panel, определенному в XAML страницы, XAML определяется следующим образом:

<UserControl
    x:Class="PhoneBook.SilverlightMainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    mc:Ignorable="d" Width="400" Height="300" d:DesignWidth="993" d:DesignHeight="887">

    <Grid x:Name="LayoutRoot" />
</UserControl>

Класс определяется следующим образом:

public partial class SilverlightMainPage : UserControl
{
    public SilverlightMainPage()
    {
        InitializeComponent();
    }        
}

И я пытаюсь создать его таким образом:

var silverlightMainPage = new PhoneBook.SilverlightMainPage();
SomeMethod((silverlightMainPage.LayoutRoot);

Что я нахожу странным, так это то, что когда я ставлю точку после экземпляра объекта, он фактически указывает LayoutRoot в качестве одного из членов, но когда я пытаюсь скомпилировать приложение, он говорит, что нет члена с таким именем.

Есть идеи, что может произойти?

Спасибо

РЕДАКТИРОВАТЬ: я также пытался создать свойство в классе SilverlightMainPage, которое возвращало элемент LayoutRoot, но он также говорит, что класс не содержит определения для корня Layout.

Ответы [ 2 ]

0 голосов
/ 24 января 2011

На самом деле я нашел проблему.

Я генерировал проект автоматически с помощью инструмента, созданного кем-то еще в компании.

Я провел несколько дополнительных тестов и добавил новый UserControl впроект и попытался получить доступ к LayoutRoot из свойства в коде, и это сработало.

Затем скопировал точно такой же код в файл с проблемой (просто изменив имя класса) и не скомпилировал.

Затем я проверил файл проекта и нашел следующий раздел:

<ItemGroup>
    <Compile Include="SilverlightMainPage.xaml.cs">
        <DependentUpon>SilverlightMainPage.xaml</DependentUpon>
    </Compile>
</ItemGroup>

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

Спасибо за ваши ответы.

0 голосов
/ 24 января 2011

Есть ли вероятность, что вы пытаетесь получить доступ к SilverlightMainPage.LayoutRoot из другой сборки? В файле MainPage.g.i.cs LayoutRoot (и все другие элементы управления, определенные в XAML) помечены как «внутренние», т.е.:

    internal System.Windows.Controls.Grid LayoutRoot;

Возможно, вы захотите создать открытое, а не внутреннее свойство, которое выполняет FindName ("LayoutRoot") и возвращает соответствующий элемент управления.

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