ControlTemplate이 포함 된 Button의 기본 스타일이 있습니다. 그런 다음 일반적으로 사용되는 "OK", "Cancel"등의 내용을 설정하는 스타일을 기반으로 몇 가지 스타일을 만들고 싶습니다. 등Style setter의 ElementName을 사용하여 바인딩
그 스타일에서나는 이미지를 텍스트 다음에, 나는 텍스트의 높이로 이미지의 높이를 바인딩 할, 그래서 나는 다음과 같은 가지고있다 :
<Style x:Key="OkayButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource RoundedButtonStyle}">
<Setter Property="Content">
<Setter.Value>
<Grid HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="{DynamicResource OkayIcon}" Height="{Binding ActualHeight, ElementName=ButtonText}"/>
<TextBlock x:Name="ButtonText" Grid.Column="1" Margin="5,0,0,0" Text="Okay"/>
</Grid>
</Setter.Value>
</Setter>
</Style>
그러면 오류가 발생합니다.
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=ButtonText'. BindingExpression:Path=ActualHeight; DataItem=null; target element is 'Image' (Name=''); target property is 'Height' (type 'Double')
필자는 분명히 할 수없는 ControlTemplate에서 ButtonText를 찾으려고합니다. 내가 여기서하려고하는 것을 성취하고이 스타일 설정자 내에서 다른 요소의 속성에 바인딩 할 수있는 방법이 있습니까?
확실하지 않지만이 작업을 수행하면 두 번째 문제가 발생합니다. 그리드의 인스턴스가 하나만있을 것입니다. 여러 개의 OkayButton이있는 경우 마지막으로 만든 것만 콘텐츠를 가져옵니다. Content가'x : Shared = "False"속성을 가진 자체 키를 가진 별도의 자원이어야한다는 문제를 해결하십시오. –
나는 이상하게 작동 할 것으로 기대한다. "{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x : Type Grid}}, Path = Children [1] .ActualHeight}"와 같은 바인딩을 사용해 보셨습니까? – nkoniishvt