我正在使用以下语法。
<Canvas Width="{Binding ActualWidth, ElementName=Beep}">
...
</Canvas>
目前, Beep 是画布下最宽的控件,但不能保证保持这样。我需要将宽度绑定到最宽的画布上的任何后继者(即任何孩子的孩子,反复说话)。
我该怎么做?
答案 0 :(得分:1)
我没有测试它,但你可以尝试这样的东西。 在xaml:
<local:Converter x:Key="converter"/>
<Canvas Width="{Binding Path=Children, RelativeSource={RelativeSource Self}}" Converter="{StaticResource converter}"">
</Canvas>
转换器可能与此类似:
public class Converter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
UIElementCollection children=value as UIElementCollection;
double ret=0.0;
recursiveSearch(children, ref ret);
return ret;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
private void recursiveSearch(UIElementCollection children, ref double width)
{
if(children == null || children.Count==0) return;
foreach(UIElement element in children)
{
FrameworkElement el=element as FrameworkElement;
if(el == null) continue;
if(el.ActualWidth>width) width=el.ActualWidth;
Panel p=el as Panel;
if(p!=null) recursiveSearch(p.Children, ref width);
}
}
}
答案 1 :(得分:-1)
尝试绑定到您感兴趣的所有控件的集合。然后编写转换器并从集合中选择最广泛的控件。
如果您没有控件集合,当然也可以使用多重绑定。