2012-01-04 97 views
0

圖像替換FormatConvertedBitmap我很新的WPF和問題如下。基於的datacontext價值

按鈕與圖片真的應該表現得像那些的WinForms - 變灰禁用時(以一些建議爲圖像設置不透明度不夠的,因爲它的葉子顏色)。

所以我發現一段代碼:

<Image RenderOptions.BitmapScalingMode="NearestNeighbor" Height="20" Width="20" 
         Opacity="{Binding SelectedItem, Converter={StaticResource selectedItemPresent}}"> 
        <Image.Source> 
         <FormatConvertedBitmap DestinationFormat="Gray8"> 
          <FormatConvertedBitmap.Source> 
           <BitmapImage UriSource="Images/edit_info.png" /> 
          </FormatConvertedBitmap.Source> 
         </FormatConvertedBitmap> 
        </Image.Source> 
        <Image.OpacityMask> 
         <ImageBrush> 
          <ImageBrush.ImageSource> 
           <BitmapImage UriSource="Images/edit_info.png"> 
          </ImageBrush.ImageSource> 
         </ImageBrush> 
        </Image.OpacityMask> 
       </Image> 

這將產生變灰按鈕和工作是成功的一半。 (轉換器只是基於數據綁定的項目值返回1或0.3)。

但是我真正需要的是僅在選定項目爲空時將其變灰。

所以,我有兩個問題。 1.如何根據數據上下文值應用所有這些東西?可能會創建另一個轉換器。 然後,我將不得不以編程方式執行此聲明xaml?或者我可以在xaml中定義一些規則,所以只有在規則觸發時,部分纔會有效?

2,本應做幾個按鈕 - 這怎麼能邏輯可以分解出來(我看到有關項目的一些style.xaml - 就是把它放在哪裏)?

感謝審議。

回答

0

爲什麼不把基於和/或OpacityIsEnabled值設置爲DataTrigger

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Content" Value="{StaticResource DefaultImage}" /> 
    <Setter Property="Opacity" Value="1" /> 

    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Content" Value="{StaticResource DisabledImage}" /> 
      <Setter Property="Opacity" Value=".3" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

這樣做的一個最大的好處是你不會將你的用戶界面與任何業務邏輯綁定在一起。在WPF中,按鈕經常與命令綁定,並且如果Command.CanExecute的計算結果爲false,它將自動禁用。你不必擔心這種情況。

+0

,我是很新的WPF。那麼,我如何通過那些需要它的按鈕來引用這個樣式(不是所有的按鈕) - 我看到按鈕上有一個Style屬性,但在Style標籤中沒有看到類似Name屬性的東西。而且,對於一個按鈕,圖像是相同的,無論其是啓用還是禁用。只需要將其變灰。但是我明白你的觀點 - 只需將移動到Style.Triggers,對吧?但是,每個按鈕都有自己的圖像源,那麼我怎樣才能將其替換爲樣式? – Nickolodeon 2012-01-04 19:29:48

+0

@Nickolodeon你可以給你的風格,例如鍵'<形式X:鍵= ImageButtonStyle ... />'然後將其應用到特定的按鈕'<按鈕樣式= 「{StaticResource的ImageButtonStyle}」'。如果啓用和禁用的圖片都是相同的,只需從樣式中刪除這些圖片,並設置每個按鈕的'',而不是在樣式中設置該值。 – Rachel 2012-01-04 19:38:05

+0

實際上我有類似於 Nickolodeon 2012-01-04 19:43:53