Обновление с SL3 -> SL4.Первая проблема: это вызывает исключение синтаксического анализатора:
<StackPanel Name={Binding} /> (same with x:Name)
Коллекция равна ObservableCollection<string>
.Работал нормально в SL3.Так что кажется, что SL4 не разрешает привязку к свойству Name.Да?
Итак: изменилось на
<StackPanel Tag={Binding} />
... так как мне просто нужно идентифицировать элемент управления в коде позади.Итак, вот ошибка (потому что это должно быть ошибкой!):
В этом фрагменте AllAvailableItems является ObservableCollection<string>
:
<ItemsControl Name="lbItems"
ItemsSource="{Binding AllAvailableItems}"
Height="Auto"
Width="Auto"
BorderBrush="Transparent"
BorderThickness="0"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="12,6,0,0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<CheckBox Tag="{Binding}"
Checked="ItemChecked_Click"
Unchecked="ItemUnchecked_Click"
Style="{StaticResource CheckBoxStyle}"
Grid.Row="0">
<CheckBox.Content>
<TextBlock Text="{Binding}"
Style="{StaticResource FormLJustStyle}" />
</CheckBox.Content>
</CheckBox>
<StackPanel Tag="{Binding}"
Orientation="Vertical"
Grid.Row="1">
<configControls:ucLanguage /> <!-- simple user control -->
</StackPanel>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
В коде, который я используюрекурсивная функция для поиска объекта Dependency с предоставленным свойством Name или Tag:
public static T FindVisualChildByName<T>(DependencyObject parent, string name, DependencyProperty propToUse) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
string controlName = child.GetValue(propToUse) as string;
if (controlName == name)
{
return child as T;
}
else
{
T result = FindVisualChildByName<T>(child, name, propToUse);
if (result != null)
return result;
}
}
return null;
}
ОК, получите это: в коде позади я могу получить элемент управления ORDERED FIRST в XAML!Другими словами, если я сначала поставлю CheckBox, я смогу получить CheckBox, но без StackPanel.И наоборот.Все это работало нормально в SL3.
Любая помощь, идеи ...?
Спасибо - Курт