Ошибка: имя 'tBox' не существует в текущем контексте - PullRequest
3 голосов
/ 08 сентября 2010

Ошибка: имя 'tBox' не существует в текущем контексте.

XAML:

<ItemsControl Name="itemsControl">
    <ItemsControl.Template>
        <ControlTemplate>
           <WrapPenel>
               <ItemsPresenter/>
            </WrapPenel>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Name="tBox" Text="{Binding Name}"></TextBlock>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

C #:

tBox.Background=Brushes.White; // Error: The name 'tBox' does not exist in the current context.

Как получить контроль доступа?

Ответы [ 5 ]

1 голос
/ 08 сентября 2010

TextBlock, который вы назвали tBox, находится внутри DataTemplate. Элементы управления внутри шаблона находятся в другой области имен, поэтому вы не можете получить к нему доступ в коде через его имя. Я не уверен, но вы можете получить его через свойство ItemTemplate и приведение его к TextBlock. Или вы можете добавить свойство в вашем коде позади, представляющее фон, и использовать привязку к свойству Background в TextBlock. Надеюсь, это поможет.

0 голосов
/ 15 февраля 2017

Я не пробовал, но, возможно, ответ здесь работает:

Доступ к элементу управления из шаблона данных с его идентифицирующим именем

, чтобы использовать что-то вроде:

var tbUserIcon= (TextBlock)checkBox.Template.FindName("tbUserIcon", checkBox);

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

0 голосов
/ 08 сентября 2010

Установите его на TextBlock, в вашем DataTemplate:

<DataTemplate>
    <TextBlock Name="tBox" Background="White" Text="{Binding Name}"></TextBlock>
</DataTemplate>

Или, если вы хотите установить Background только в определенных условиях, рассмотрите возможность использования Triggers:

<DataTemplate>
    <TextBlock Name="tBox" Text="{Binding Name}"></TextBlock>
    <DataTemplate.Triggers>
        <Trigger SourceName="tBox" Property="IsMouseOver" Value="True">
            <Setter TargetName="tBox" Property="Background" Value="White" />
        </Trigger>
    </DataTemplate.Triggers>
</DataTemplate>

Дополнительную информацию о том, как использовать триггеры, можно найти здесь: Экскурсия по WPF - часть 4 (шаблоны данных и триггеры)

0 голосов
/ 08 сентября 2010

Поскольку Background является свойством зависимостей, вам придется использовать

tBox.SetValue (BackgroundProperty, новый SolidBrush (Color.White));

0 голосов
/ 08 сентября 2010

this.Background = Brushes.White; (при условии, что его код находится за элементом управления)?

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