2013-11-14 159 views
0

我正在使用adorner圖層來在我的網格(WPF網格)上生成網格(例如,整個屏幕上的框)。WPF中的裝扮者,isEnabled不工作?

我希望這隻在標記複選框時才顯示。但是,當我綁定「IsEnabled」屬性時,沒有任何反應。即使我將IsEnabled設置爲false,網格疊加層仍然顯示!

這是我從我的mainWindow.xaml做,注意的IsEnabled設置爲false,但它仍然顯示:

<Grid> 
     <!--Adornerdecorator is made to make sure the adorner is in the background, and not the foreground--> 
     <AdornerDecorator> 
      <View:GridWithRulerxaml IsEnabled="False" /> 
     </AdornerDecorator> 
     <ItemsControl ItemsSource="{Binding Classes}"/> 
     <ItemsControl ItemsSource="{Binding Edges}"/> 
    </Grid> 

這是裝飾器用戶控件:

namespace UMLDesigner.View 
{ 
/// <summary> 
/// Interaction logic for GridWithRulerxaml.xaml 
/// </summary> 
public partial class GridWithRulerxaml : UserControl 
{ 
    public GridWithRulerxaml() 
    { 
     InitializeComponent(); 

     //Loaded event is necessary as Adorner is null until control is shown. 
     Loaded += GridWithRulerxaml_Loaded; 

    } 

    void GridWithRulerxaml_Loaded(object sender, RoutedEventArgs e) 
    { 
     var adornerLayer = AdornerLayer.GetAdornerLayer(this); 
     var rulerAdorner = new AlignmentAdorner(this); 
     adornerLayer.Add(rulerAdorner); 
    } 
} 
} 

最後是裝飾者本身:

namespace UMLDesigner.Utilities 
{ 
public class AlignmentAdorner : Adorner 
{ 
    private FrameworkElement element; 
    public AlignmentAdorner(UIElement el) 
     : base(el) 
    { 
     element = el as FrameworkElement; 
    } 

    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
    { 
     base.OnRender(drawingContext); 

     double height = element.ActualHeight; 
     double width = element.ActualWidth; 

     double linesHorizontal = height/50; 
     double linesVertical = width/50; 

     var pen = new Pen(Brushes.LightGray, 1) { StartLineCap = PenLineCap.Triangle,  EndLineCap = PenLineCap.Triangle }; 

     int offset = 0; 

     for (int i = 0; i <= linesVertical; ++i) 
     { 
      offset = offset + 50; 
      drawingContext.DrawLine(pen, new Point(offset, 0), new Point(offset, height)); 
     } 

     offset = 0; 

     for (int i = 0; i <= linesHorizontal; ++i) 
     { 
      offset = offset + 50; 
      drawingContext.DrawLine(pen, new Point(0, offset), new Point(width, offset)); 
     } 
    } 
} 
} 

我真的希望你能幫我在這裏的傢伙。

+0

你需要更多信息嗎? –

回答

0

IsEnabled屬性只啓用/禁用與元素的交互,並且與可見性無關。

當你想隱藏它時,你應該做的是將GridWithRulerxaml的可見性屬性設置爲摺疊的 或隱藏的 ,並且當你希望顯示時將其設置爲可見。

編輯:測試它,將可見性設置爲隱藏AdornerDecorator內的GridWithRulerxaml usercontrol不會隱藏裝飾器。

想想更多關於它的內容,如果這不是您想要的,可以使用IsEnabled屬性來執行此操作,觀察其中的更改並根據值添加/刪除裝飾器。