可以';鼠标双击时无法更改ImageSource

本文关键字:ImageSource 双击 鼠标 可以 | 更新日期: 2023-09-27 18:28:39

我有一个程序,其中有一个用GeometryModel3D表示的立方体,还有一个用纹理填充的ListBox,保存在数据库中。每次双击鼠标时,我都试图更改立方体的纹理,但它不起作用。你能帮帮我吗?这是源代码:

<ModelVisual3D x:Name="floor">
                    <ModelVisual3D.Content>
                        <Model3DGroup>
                            <DirectionalLight Color="#FFE2E0E0" Direction="-1,-1,-3" >
                            </DirectionalLight>
                            <GeometryModel3D x:Name="floorModel">
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D x:Name="floorGeometry" Positions="{Binding FLoorPoints3D}" TriangleIndices="{Binding FloorPointsIndices}"                                                         
                                        TextureCoordinates="0,1 0,0 1,0 1,1 1,1 -0,1 0,-0, 1,0 1,1 -0,1 0,-0 1,0 1,0 1,1 -0,1 0,-0 -0,0 -0,0 1,-0 1,1 0,1 1,-0 1,1 0,1 -0,1"/>
                                </GeometryModel3D.Geometry>                                   
                            </GeometryModel3D>
                        </Model3DGroup>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
  public int FloorImagesLoader(string query)
    {            
        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand command = new SqlCommand(query, connection);
        SqlDataReader reader;
        HomeDesigner.Converters converters = new Converters();
        List<HomeDesigner.Classes.Floor> floorImageList = new List<Classes.Floor>();
        HomeDesigner.Classes.Floor floorClass = new Classes.Floor();
        try
        {
            connection.Open();
            reader = command.ExecuteReader();
            while (reader.Read())
            {
                {
                    floorImageList.Add(new HomeDesigner.Classes.Floor { FloorTextureID = (int)reader[0], Image = converters.ByteArrayToImage(((byte[])reader[1])) });
                }
            }
        }
        finally
        {
            connection.Close();
        }
        ListBoxImages.ItemsSource = floorImageList;
        ID = floorClass.FloorTextureID;
        return ID;
    }

BitmapImage textureImage = new BitmapImage();
    private void SetImageTexture()
    {
        int parquetIndex = 0;
        ListBoxImages.MouseLeftButtonDown += (sender, e) =>
        {
            if (ListBoxImages.ItemsSource != null)
            {
                if (buttonParquetClick == true)
                {
                    if (e.LeftButton == MouseButtonState.Pressed && e.ClickCount == 2)
                    {
                        parquetIndex = ListBoxImages.SelectedIndex;
                        string parquete_Query = "SELECT FloorID, FloorImage FROM HomeDesigner.dbo.Floor where FloorTypeID=3";
                        textureImage = TexturesLoader(parquete_Query, parquetIndex + 1);
                        ImageBrush imageBrush = new ImageBrush();
                        imageBrush.ImageSource = textureImage;                           
                        floorModel.Material = new DiffuseMaterial(imageBrush);

                    }
                }
                else
                {
                }
            }
        };

    }

可以';鼠标双击时无法更改ImageSource

ListBox类已经处理了MouseLeftButtonDown事件。您可以使用PreviewMouseLeftButtonDown

ListBoxImages.PreviewMouseLeftButtonDown += (sender, e) =>
    {
        ...
    }

并且当然不需要在鼠标按下事件处理程序中检查CCD_ 3。