2014-10-31 4 views
0

GeometryModel3D로 표시된 큐브가 있고 데이터베이스에 저장된 텍스처로 채워진 ListBox가있는 프로그램이 있습니다. 마우스를 두 번 클릭 할 때마다 입방체의 질감을 변경하려고하지만 작동하지 않습니다. 저 좀 도와 주 시겠어요?MouseDoubleClick 일 때 ImageSource를 변경할 수 없습니다.

<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 
       { 

       } 

      } 
     }; 


    } 

답변

0

MouseLeftButtonDown 이벤트가 이미 목록 상자 클래스에 의해 처리됩니다 다음은 소스 코드입니다.

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

및 마우스 다운 이벤트 처리기에서 e.LeftButton == MouseButtonState.Pressed를 확인 할 필요는 물론 없다 : 대신 PreviewMouseLeftButtonDown를 사용할 수 있습니다.

+0

이러한 변경 사항을 만들었지 만 여전히 작동하지 않습니다. – Scarabey

+0

아무 생각없이, 그것은 나를 위해 작동합니다. 이벤트 핸들러에 중단 점을 설정하여 호출되는 것을 확인 했습니까? – Clemens