-1

我有以下代码:

<ControlTemplate x:Key="ViewItemTemplate"
                             TargetType="ListViewItem">
                    <StackPanel Orientation="Horizontal">
                        <CheckBox Margin="0,0,3,0" x:Name="CkBox">
                            <CkBox.IsChecked>
                                <Binding Path="IsSelected"
                                     Mode="TwoWay">
                                    <Binding.RelativeSource>
                                        <RelativeSource Mode="TemplatedParent" />
                                    </Binding.RelativeSource>
                                </Binding>
                            </CkBox.IsChecked>
                            <DataTrigger Binding="{Binding InvalidForeground}" Value="true">
                                <Setter TargetName="CkBoxVisual" Property="Foreground" Value="#999999"/>
                            </DataTrigger>
                        </CheckBox>
                        <ContentPresenter />
                    </StackPanel>
            </ControlTemplate>

如何绑定 InvalidForeground?我在网上查看了许多他们告诉使用 DataTemplate 的示例。但是当我在 StackPanel 上方添加 DataTemplate 时出现错误?难道我做错了什么?

我正在尝试绑定 InvalidForeground,以便我可以添加一些代码。我收到一个错误:由于未知的 DataContext,无法解析符号“InvalidForeground”。

4

2 回答 2

1

您似乎正在尝试声明一个自定义复选框控件以在 WPF 应用程序中使用。因此,您的“InvalidForeground”属性将被公开,但模板不了解它的实际类型是预期的。

我在这里发布了另一个答案,它为自定义按钮提供了完整的逐步说明。原则是一样的,我试图指出我对声明、类型等的理解。希望它不仅可以指导您,还可以指导其他类模板。

于 2012-11-20T15:49:56.267 回答
0
<ControlTemplate x:Key="ViewItemTemplate"
                         TargetType="ListViewItem">
        <StackPanel Orientation="Horizontal">
            <CheckBox Margin="0,0,3,0" x:Name="CkBox">
                <CkBox.IsChecked>
                    <Binding Path="IsSelected"
                                 Mode="TwoWay">
                        <Binding.RelativeSource>
                            <RelativeSource Mode="TemplatedParent" />
                        </Binding.RelativeSource>
                    </Binding>
                </CkBox.IsChecked>
                 <DataTrigger Binding="{Binding InvalidForeground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" Value="true">
                    <Setter TargetName="CkBoxVisual" Property="Foreground" Value="#999999"/>
                </DataTrigger>
            </CheckBox>
            <ContentPresenter />
        </StackPanel>
    </ControlTemplate>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        abc A = new abc();
        A.InvalidForeground = true;
    }
}
public class abc : INotifyPropertyChanged
{
    private bool invalidForeGround;
     public bool InvalidForeground
    {
        get
        { return invalidForeGround; }
        set
        { 
            invalidForeGround = value;
            Notify("InvalidForeground");
        }
     }
     private void Notify(string propName)
     {
         if (PropertyChanged != null)
             PropertyChanged(this, new PropertyChangedEventArgs(propName));
     }

    public event PropertyChangedEventHandler PropertyChanged;
}

InvalidForeground 必须是上面代码是其模板的控件的DataContext中的属性。我希望这会有所帮助

于 2012-11-20T15:51:06.987 回答