作为一个简单的例子,我在资源字典中有一个按钮,我将它存储在ContentControl中。我需要将Button的Visibility属性绑定到页面上的复选框,但是在复选框之前创建了按钮,因此我的setter将无法工作。


有没有办法在页面初始化后进行绑定绑定?我知道我可以从后面的代码中做到这一点,但是我将有很多按钮,并且将按钮的初始化代码的一部分放在不同的位置似乎相当混乱。


 < ResourceDictionary>&# xA;< button x:Key =“MyButton”> Hi There
< button.Style>
 <样式和GT;
 < Setter Property =“IsVisible”Value =“false”/>
 < DataTrigger // myCheckBox尚不存在......
 Binding =“{Binding ElementName = myCheckBox,Path = IsChecked}”“Value =”True“>
 < Setter Property =“IsVisible”Value =“true”/>
 < DataTrigger />
 < /样式和GT;
< /button.Style>
< /按钮>
< / ResourceDictionary中>

<网格和GT;
 < Grid.RowDefinitions>
 < RowDefinition Height =“1 *”/>
 < RowDefinition Height =“1 *”/>
 < RowDefinition Height =“1 *”/>
 < /Grid.RowDefinitions>

 < CheckBox x:Name =“myCheckBox”Row = 1 /> //将我的按钮绑定到

这已太晚了< ContentControl Content =“{StaticResource MyButton}”Row = 2 />

< / Grid>



 我发现像延迟加载,在你需要的时候加载对象,我已经探索了制作我自己的绑定类,但我只是不知道该去哪里。


我目前的最爱想法是这样的:


xaml:


 property =“{lateBinding source = whatever path = you.want}“



 和一些通用的c#类代码:


 class lateBinding:Binding
 {
 OnPageInitialized()
 {
 SetBinding(myObject,myProperty,myBinding);
 }
}



 任何想法?

答案 0 :(得分:0)
您的代码几乎没有变化
<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<Button x:Key = "MyButton">Hi There
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=myCheckBox, Path=IsChecked}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=myCheckBox, Path=IsChecked}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<CheckBox x:Name = "myCheckBox" Grid.Row="1"/>
<ContentControl Content = "{StaticResource MyButton}" Grid.Row="2"/>
</Grid>
</Window>