【问题标题】:enable child control while Custom parent is disabled in wpf C#在 wpf C# 中禁用自定义父项时启用子控件
【发布时间】:2021-01-09 17:47:20
【问题描述】:

您好,我为缩放图片制作了定制的父控件。在那个 Control 里面有子画布,在 Canvas 里面有子图像 Control 。我创建了缩放和图像测量菜单。我也可以测量坐标图像。我禁用 Parent ZoomBorder 控件时的问题我无法触发 Child Image 的事件。我可以禁用名为 ZoomBorder 的 ZoomControl 但我想要 MouseDown 的图像事件。启用 Zoomcontrol 并且它可以工作时,我可以禁用子图像事件。 这是我的代码。

<utils:ZoomBorder x:Name="ZoomBorder"   IsEnabled="{Binding IsEnableZoom}"   ClipToBounds="True" Background="Gray" Grid.Row="3" Grid.Column="2" Grid.ColumnSpan="4">
        <Canvas IsEnabled="{Binding IsEnableCanvas}">
            <Image  x:Name="DIIMGFINAL" cal:Message.Attach="[Event MouseDown] = [Action MDownCalCulateDistance($source, $eventArgs)];
                [Event MouseUp] = [Action MUpCalCulateDistance($source, $eventArgs)];
                [Event MouseMove] = [Action MMoveCalCulateDistance($source, $eventArgs)]"/>
            <Line IsHitTestVisible="False"  X1="{Binding FirstPoint.X}" Y1="{Binding FirstPoint.Y}"
                  X2="{Binding SecondPoint.X}" Y2="{Binding SecondPoint.Y}"
                  Stroke="Red" StrokeThickness="3"/>
        </Canvas>
    </utils:ZoomBorder>

这是菜单项 ImageMeasuring 和 Zoom

<Menu Grid.ColumnSpan="3" Grid.Column="1" Grid.Row="0"  Background="Transparent" >
        <MenuItem x:Name="ズームControl" Header="ズーム">
            <!--Item For Zoom-->
        </MenuItem>

        <MenuItem x:Name="Img_Measurement" Header="Image Measurement">
            <!--Item For Measure-->
        </MenuItem>
    </Menu>

这是我用于 Zoom 激活的 C# 代码

  public void ズームControl()
    {
        //For Only Zoom
        IsEnableZoom = true;
        IsEnableCanvas = false;
        MessageBox.Show("Zoom Control Starts", "Alert", MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }

这是图像测量

 public void Img_Measurement()
    {
        IsEnableZoom = false;
        IsEnableCanvas = true;
        MessageBox.Show("Image Measurement Starts", "Alert", MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }

Here Is My Image MouseDown 事件

public void MDownCalCulateDistance(object sender, System.Windows.Input.MouseEventArgs e)
    {
         f (IsEnableCanvas == false) return;

        if (!(sender is System.Windows.Controls.Image)) return;
        try{
            //Code Here
        }
        Catch(Exception ex){
            //code here
        }
    }

这是用于启用的属性

 public bool IsEnableZoom
    {
        get
        {
            return _isEnableZoom;
        }
        set
        {

            _isEnableZoom = value;
            NotifyOfPropertyChange(() => IsEnableZoom);
        }
    }

    public bool IsEnableCanvas
    {
        get
        {
            return _isEnableCanvas;
        }
        set
        {

            _isEnableCanvas = value;
            NotifyOfPropertyChange(() => IsEnableCanvas);
        }
    }

如您所见,当我禁用 ZoomControl 的 ZoomBorder 时,我无法执行 MouseDown 事件。当启用父事件的 ZoomBorder 时,我可以禁用 Mousedown。请帮我 。提前致谢

【问题讨论】:

    标签: c# wpf mvvm caliburn.micro


    【解决方案1】:

    禁用的元素不会引发鼠标事件。这是设计使然。

    来自docs

    未启用的元素不参与命中测试或焦点,因此不会成为输入事件的来源。

    显而易见的解决方案是不要禁用Canvas。您仍然可以让它看起来和/或表现得像被禁用一样。

    【讨论】:

    • 我想在禁用父控件但启用子控件时引发事件。然后 。可以吗
    • 当您禁用 Canvas 时,它的子代也被禁用。所以子控件没有启用。
    • 但是我想启用子控件可以吗....
    • 不,您不能启用已禁用 Canvas 的子控件。
    猜你喜欢
    • 2010-09-15
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多