Вы используете ElementName=
, указывая на x:Key
, который не совпадает. Однако вы не можете использовать x:Name
для ссылки. В MSDN трудно понять, почему его нельзя использовать, но, вероятно, его можно найти, собрав все воедино.
Я предполагаю, что именная область не зарегистрирована для элементов в ResourceDictionary, только для элементов в элементе в словаре ресурсов. Удар F1 на ResourceDictionary.FindName получил меня это: http://msdn.microsoft.com/en-us/library/system.windows.resourcedictionary.findname.aspx
где написано: «Не поддерживается этой реализацией словаря». Думаю, это не ответило бы на это, но дает мне понимание, что мы не можем легко сделать это сами.
В качестве ответа на ваш вопрос:
Это работает для меня:
ResourceDictionary:
<DockPanel x:Key="errorDisplay" LastChildFill="False">
<Border Background="Red" DockPanel.Dock="Top">
<TextBlock x:Name="errorTextBlock" />
</Border>
<Canvas DockPanel.Dock="Top" Height="15">
<Polygon Points="{Binding RelativeSource={RelativeSource AncestorType=DockPanel}, Path=ActualWidth, Converter={StaticResource PointsToStringArrayConverter},Mode=OneWay}"
Fill="Red" Stroke="Black" StrokeThickness="1" />
</Canvas>
</DockPanel>
MainWindow:
<ContentPresenter Content="{StaticResource errorDisplay}"/>
Преобразователь:
public class PointsToStringArrayConverter : IValueConverter
{
public object Convert( object value , Type targetType , object parameter , System.Globalization.CultureInfo culture )
{
if ( !( value is double ) ) { return value; }
var dbl = ( double )value;
PointCollection p = new PointCollection( );
p.Add( new Point( dbl , dbl ) );
p.Add( new Point( dbl/2 , dbl ) );
p.Add( new Point( dbl , dbl/2 ) );
p.Add( new Point( dbl /2, dbl/2 ) );
return p;
}
public object ConvertBack( object value , Type targetType , object parameter , System.Globalization.CultureInfo culture )
{
throw new NotImplementedException( );
}
}
Вы сказали, что уже пытались использовать RelativeSource, но попробуйте установить точку останова в конвертере и посмотрите, сработает ли она.
Для получения дополнительной информации:
Наименования: http://msdn.microsoft.com/en-us/library/ms746659.aspx
Ресурсы: http://msdn.microsoft.com/en-us/library/ms742538.aspx