2017-01-25 10 views
4

MenuItem.Icon을 사용하여 내 Mainwindow의 Background [MenuItem 컨트롤을 통해]을 설정하려고합니다. 문제는 MenuItem.Icon은 개체 인이고 Mainwindow.Background는 브러시 (또는 브러시 제어) 유형입니다. 이 두 형식을 변환하는 방법이 있습니까? BrushConverter.ConvertFrom을 시도했지만 이미지 개체 (표시된 Exception 메시지)를 변환 할 수 없습니다. 감사! 여기에 몇 가지 XAML 코드입니다 :개체를 브러시 (WPF)로 변환

<MenuItem Header="Waterfall" Click="BackgroundMenuItem_Click"> 
          <MenuItem.Icon> 
           <Image Source="images/backgrounds/Waterfall.jpg"/> 
          </MenuItem.Icon> 
         </MenuItem> 

여기에 코드 뒤에 :

<Window ...> 
    <Window.Background> 
     <ImageBrush ImageSource="img/0.png" /> 
    </Window.Background> 
    ... 
</Window> 

Background = new ImageBrush() { ImageSource = new BitmapImage(new Uri("img/1.png", UriKind.RelativeOrAbsolute)) }; 

또는 당신이 사용하는 경우 :

//switch background: 
//event 
private void BackgroundMenuItem_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     BackgroundMenuItem_Switch((MenuItem)sender, e); 
    } 
    catch(Exception exc) 
    { MessageBox.Show(exc.Message); } 
} 
//switch func 
private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e) 
{ 
    var converter = new BrushConverter(); 
    var brush = converter.ConvertFrom(sender.Icon); 
    this.Background = (Brush)brush; 
} 
+0

확실하지 않은 메시지가 있습니다. –

+0

[ImageBrush] (https://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush (v = vs.110) .aspx)를 찾고 계시지 않습니까? – wkl

+0

사실, 나는 편집 된 버전보다 원본 버전을 선호합니다. 실제로 이미지가 아닌 객체로 변환됩니다. 'MenuItem.Icon'이'object'라는 사실은 IMO의 기술적 인 세부 사항 일뿐입니다. 사실이 편집은 질문의 의미를 바꿀 수도 있습니다. 다른 사람들이 원래 제목으로 쉽게이 게시물을 찾을 수 있다고 생각합니다. 하지만 어쩌면 그건 나뿐입니다. – wkl

답변

2

이미지에서 ImageBrush을 만들 수 있습니다.

private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e) 
{ 
    this.Background = new ImageBrush(((Image)(sender.Icon)).Source); 
} 
+0

정말 고마워요! (그리고 다른 모든 사람들도), 어떤 이유로 MenuItem.Icon이 .Source 속성이없는 객체로 취급되고있는 것으로 보입니다. 그래서 나는 this.Background = new ImageBrush ((Image (sender.Icon)) Source); ' – Yair

+0

@Yair 네,'MenuItem.Icon'은'object' 타입입니다. 나는 그것을 놓쳤다. 캐스트를 포함하도록 답변을 업데이트했습니다. – wkl

1

당신은 ImageBrush와 사용할 수 이미지 리소스, 패키지 URI 사용 :

Background = new ImageBrush() { ImageSource = new BitmapImage(new Uri("pack://application:,,,/img/x.png", UriKind.RelativeOrAbsolute)) };