0

編集:列挙型を使用してThorstens Answerに従ってコードを変更しましたが、機能しませんでした。

依存関係プロパティを使用して、作成中の WPF コントロールに影響を与えています。私は WPF を初めて使用するので、何が間違っているのかわからず、それを説明する適切な記事が見つかりません。

たとえば、Dep プロパティを介してコントロールの可視性を定義しようとしています。この場合、プロパティは次のようになります。

public static readonly DependencyProperty IconVisibilityBoldProperty = 
DependencyProperty.Register("IconVisibilityBold", typeof(Visibility), typeof(RTFBox),
new PropertyMetadata(Visibility.Hidden), VisibilityValidateCallback);
private static bool VisibilityValidateCallback(object value)
{
 Visibility prop = (Visibility) value;
 if (prop == Visibility.Hidden || prop == Visibility.Visible)
 {
  return true;
 }
 return false;
}
public Visibility IconVisibilityBold
{
 get
 {
  return (Visibility)GetValue(IconVisibilityBoldProperty);
 }
 set
 {
  SetValue(IconVisibilityBoldProperty, value);
 }
}

編集:正しい XAML については、Slugarts の回答を探してください。この場合、ToggleButton の XAML エントリは次のようになります。

<ToggleButton Visibility="{Binding Path=IconVisibilityBold}" ToolBar.OverflowMode="Never" x:Name="ToolStripButtonBold" Command="EditingCommands.ToggleBold" ToolTip="Bold">
<Image Source="Images\Bold.png" Stretch="None"/>
</ToggleButton>

プロパティを出力しました。メタデータのデフォルト値が意味するように「非表示」と表示されますが、バインディングに何か問題があるようです。そこに何を書けばいいの?

4

3 に答える 3

2

親コントロールのプロパティを参照せずにバインドしようとしていますが、暗黙的に設定されることはありません。ToggleButtonバインディングのElementNameを、作成するUserControlの名前に設定する必要があります(まだx:Nameプロパティがない場合はx:Nameプロパティを指定します)。

<UserControl x:Name="rtfBox">
<ToggleButton Visibility="{Binding ElementName=rtfBox, Path=IconVisibilityBold}" ... />
...
</UserControl>

また、Visibilityプロパティは文字列ではなく列挙型であると正しく述べている、前の回答に従う必要があります。

于 2012-05-10T09:28:18.277 に答える
1

したがって、プロパティは文字列です...しかし、列挙可能でなければなりません:

namespace System.Windows
{
    public enum Visibility : byte
    {
        Visible,
        Hidden,
        Collapsed,
    }
}

プロパティに正しくアクセスするには、テキストボックスをデータコンテキストにバインドするか、参照として使用する必要があります

于 2012-05-10T09:12:19.843 に答える
1

のプロパティには type の値が必要ToggleButtonです。文字列の代わりにそれを使用するようにコードを変更する必要があります。VisibilitySystem.Windows.Visibility

public static readonly DependencyProperty IconVisibilityBoldProperty = 
DependencyProperty.Register("IconVisibilityBold", typeof(System.Windows.Visibility), typeof(RTFBox));

public System.Windows.Visibility IconVisibilityBold
{
 get
 {
  return (System.Windows.Visibility)GetValue(IconVisibilityBoldProperty);
 }
 set
 {
  SetValue(IconVisibilityBoldProperty, value);
 }
}
于 2012-05-10T09:15:48.370 に答える