2013-08-23 35 views
2

我有一個MVVM WPF應用程序,我想創造風格相似的開始屏幕上的一個在VS2012(如下圖所示)創建VS2012風格的ListView /堆棧面板中的WPF

ListVS2012

我想創建一個ListView或堆棧面板,就像上圖中的最近文檔一樣。我想用DataTemplate這樣做,這樣我就可以在應用程序的其他區域使用該控件。在WinForms中,我將設計一個用戶控件,但在WPF中,我很困惑,因爲要做到這一點,最好的方法是使用WPF。我已經使用包含數據模板的資源文件,對鎖定/解除固定圖像的轉換視爲

<DataTemplate x:Key="imageWithTextBlockTemplate"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> 
     <Image Source="{Binding Converter={StaticResource booleanToImageConverter}}" 
           Stretch="UniformToFill" Width="16"/> 
     <TextBlock Text="{Binding}"/> 
    </StackPanel> 
</DataTemplate> 

這還沒完(清楚),但是這是正確的做法,或者有更好的/更標準的做這種事情的方式?

謝謝你的時間。

+0

爲什麼不在WPF中設計UserControl? – Dutts

+0

我可以做,但我的印象是,要在列表視圖中獲取圖像和文本,我無法使用現有的控件,必須創建自己的控件。總之,我有點困惑,因爲正確的做法... – MoonKnight

+1

對不起,我的評論是相當輕浮。實際上,我認爲你提出的使用DataTemplate的解決方案完全合理,比寫一個全新的控件更「WPF」。 – Dutts

回答

2

如果您正在嘗試創建類似於VS2012的控件,那麼在VS2012中找出「如何」的最佳位置非常重要。記得VS2012是用WPF製作的。

所以,如果你得到Snoop和分析「起始頁」,你會看到如下:

enter image description here

正如你可以看到它確實是一個ListBox是正在使用。

然後,他們有DataTemplate中與自定義CheckBox舉辦「固定」狀態,然後右邊是另一Grid持有項目圖標(Image)和名稱(TextBlock)一Grid

更新:

至於CheckBox,他們使用Microsoft.VisualStudio.PlatformUI.ImageCheckBox。現在你可以啓動反射器來獲得確切的定義,或者根據Snoop的數據說,它看起來像這個控件在其中包含一個Border和一個Image。它採用

Image來源是如:

pack://application:,,,/Microsoft.VisualStudio.Shell.11.0;component/UI/Images/pinned normal.png 

pack://application:,,,/Microsoft.VisualStudio.Shell.11.0;component/UI/Images/unpinned normal.png 

現在爲你實現這個信息,

  • 我會在你的虛擬機收集的各個項目,請按住TextIsPinned狀態。
  • 接下來,創建一個自定義CheckBox樣式,並修改它的ControlTemplate以保存包含圖像的圖像或邊框。
  • 使用ControlTemplate.Triggers檢查IsChecked財產,並相應修改Image.Source
  • 有了這個各種「固定」的圖像之間進行切換,你可以有你DataTemplateListBox.ItemTemplateStackPanelOrientation="Horizontal")幾乎與2名兒童。首先使用上面創建的自定義Style和第二個TextBlock複選框。
  • 最後綁定在DataTemplate{Binding IsPinned}TextBlock.TextCheckBox.IsChecked{Binding Text}

,應該是相當多了。你不得不調整ListBox.ItemContainerStyle擺脫從列表框中說默認的鼠標懸停效果,也可能設置HorizontalContentAlignment="Stretch",但它們不是你的一部分DataTemplate