Może to być oczywiste ... Jak mogę odwołać się do elementów XAML później w tym samym pliku XAML?Jak odwołać się do definicji wiersza/kolumny w Grid.Row/Grid.Column?
Przykład:
<Grid.RowDefinitions>
<RowDefinition Height="661*" Name="someGridRow" />
<RowDefinition Height="230*" Name="someOtherGridRow"/>
</Grid.RowDefinitions>
Potem zdefiniować różne kontrole wewnątrz sieci i chciałbym odwołać te wiersze po imieniu, a nie numer:
<RichTextBox Grid.Row="someGridRow" ... />
Bo jeśli używam Grid.Row="0"
na wiele kontrolek, a następnie dodając wiersz przed pierwszym wierszem, muszę ręcznie zmienić wszystkie odniesienia do Grid.Row="1"
.
Dzięki.
EDIT:
Dzięki odpowiedzi Czytałem trochę na XAML.
Po tym wszystkim, to jest możliwe, aby odwoływać się do poprzedniego elementu wg nazwy widocznie:
Grid.Row="{Binding ElementName=someGridRow}"
lub
Grid.Row="{x:Reference someGridRow}"
ale to nie rozwiązuje problemu całkowicie, ponieważ Grid.Row wymaga int , podczas gdy niektóreGridRow nie jest int, to System.Windows.Controls.RowDefinition.
Więc potrzebna jest odpowiednikiem XAML z
Grid.Row = grid.RowDefinitions.IndexOf(someGridRow)
który w kod związany byłby napisany
Grid.SetRow(richTextBox, grid.RowDefinitions.IndexOf(someGridRow))
lub zrobić wiązanie Grid.Row
do nieruchomości, na obiekcie grid
, która ma ścieżkę "RowDefinitions.IndexOf"
z parametrem someGridRow
:
PropertyPath path = new PropertyPath("RowDefinitions.IndexOf", someGridRow);
Binding binding = new Binding() { ElementName = "grid", Path = path };
richTextBox.SetBinding(Grid.RowProperty, binding);
(to faktycznie nie działa w C#, więc muszę być robi coś złego, chociaż Grid.SetRow
powyżej działa)
XAML 2009 definiuje <x:Arguments>
do wywołania konstruktorów, które mają parametry. Jeśli to działało w WPF XAML, to coś podobnego by działało, jak przypuszczam?
<Grid.Row>
<Binding ElementName="grid">
<Binding.Path>
<PropertyPath>
<x:Arguments>
RowDefinitions.IndexOf
<Binding ElementName="someGridRow"/>
</x:Arguments>
</PropertyPath>
</Binding.Path>
</Binding>
</Grid.Row>
gdzie <Binding ElementName="someGridRow"/>
można również zastąpić <x:Reference Name="someGridRow"/>
w XAML 2009.
myślę, że wszystko będzie działać jak nigdy ścieżce nieruchomości nie pozwala na wywoływanie metod, takich jak 'IndexOf'. –
W porządku, poddaję się ... – SemMike