Обход узла C # WPF? - PullRequest
0 голосов
/ 22 июля 2011

У меня есть такая кнопка:

<Button Grid.Column="0" Margin="10">
    <Button.Content>
        <Viewbox>
            <Label Name="Option1">Hello</Label>
        </Viewbox>
    </Button.Content>
</Button>

И я хочу получить его содержание (Привет). Я ранее использовал

 (e.Source as Button).Content.ToString()

И это дало мне содержимое кнопки, если это было только какое-то значение, но теперь есть окно просмотра и метка, поэтому она не работает. Могу ли я сделать что-то вроде (e.Source как кнопка) .Content.Viewbox.Label.Content ()?

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Вам нужно сделать это следующим образом:

(((e.Source as Button).Content as Viewbox).Child as Label).Content

Но это все равно должно работать.

Также обратите внимание, что, поскольку вы используете «безопасное приведение» с ключевым словом as, в любой момент вы можете столкнуться с null, который будет выбрасывать NRE.Так что вы можете захотеть быть более многословным, как:

Button b = e.Source as Button;
if(b != null) {
   Viewbox v = b.Content as Viewbox;

   // .. etc
}
0 голосов
/ 22 июля 2011

Даже не пытайтесь делать это так ... Конечно, возможно , но это болезненно и подвержено ошибкам.Вместо этого используйте DataTemplate:

<Button Grid.Column="0" Margin="10" Content="Hello">
    <Button.ContentTemplate>
        <DataTemplate>
            <Viewbox>
                <ContentPresenter Content="{Binding}" />
            </Viewbox>
        </DataTemplate>
    </Button.ContentTemplate>
</Button>

Способ представления содержимого кнопки является исключительно вопросом пользовательского интерфейса.Логическое содержание должно (обычно) не иметь отношения к тому, как оно представлено.С помощью приведенного выше кода вы можете получить логическое содержимое напрямую через свойство Content.

0 голосов
/ 22 июля 2011

Вам нужно будет привести Button.Content в качестве Viewbox, затем Viewbox.Content в качестве Label, затем преобразовать Label.Content в строку

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