У меня есть НАЗН.КНОПКА с углом DependencyProperty:DataBinding в ControlTemplate к DependencyProperty работает, но по-прежнему бросает ошибки
public static readonly DependencyProperty AngleProperty = DependencyProperty.Register(
"Angle",
typeof(float),
typeof(TriangularButton),
new FrameworkPropertyMetadata(0f, FrameworkPropertyMetadataOptions.AffectsRender));
public float Angle
{
get { return (float)GetValue(AngleProperty); }
set { SetValue(AngleProperty, value); }
}
В ControlTemplate Я хочу связываться с углом. Я пробовал несколько способов (см. Ниже), и каждый из них работает, но я получаю сообщение об ошибке System.Windows.Data. Как я могу избавиться от него?
Что я пробовал:
<Button.Template>
<ControlTemplate TargetType="Button">
<Path ...>
<Path.RenderTransform>
<RotateTransform Angle="{Binding Angle, RelativeSource={RelativeSource TemplatedParent}}"/>
</Path.RenderTransform>
</Path>
</ControlTemplate>
</Button.Template>
Тогда я получаю:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Angle; DataItem=null; target element is 'RotateTransform' (HashCode=55197304); target property is 'Angle' (type 'Double')
Когда я делаю это:
<Button.Template>
<ControlTemplate TargetType="Button">
<Path ...>
<Path.RenderTransform>
<RotateTransform Angle="{Binding Angle, RelativeSource={RelativeSource AncestorType=Button}}"/>
</Path.RenderTransform>
</Path>
</ControlTemplate>
</Button.Template>
Тогда я получаю:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Button', AncestorLevel='1''. BindingExpression:Path=Angle; DataItem=null; target element is 'RotateTransform' (HashCode=24935945); target property is 'Angle' (type 'Double')
EDIT:
Благодаря this answer я узнал причину, вероятно, потому, что кнопка не видна изначально. Если я помещаю Button где-нибудь, где он изначально видимый, ошибка исчезает. Есть ли способ избавиться от ошибки, когда я использую Button где-то, что изначально не видно?
DataContext - это сама кнопка. DependencyProperty находится в коде. – gartenriese
@gartenriese дайте мне второй –
Возможно, я нашел причину ошибки, см. Редактирование. Однако я до сих пор не знаю, как избавиться от него. – gartenriese