2011-08-13 79 views
3

我想要解決WPF應用程序中樣式/綁定數據的不同方式。爲了更好地理解這一點,我想就如何設計我的具體示例提供建議/幫助。WPF:什麼是佈局的最佳做法

下面的屏幕截圖展示了我的目標。我還包括了我已經寫過的代碼。但是,這只是使用簡單的StackPanel輸出主標題和文本。

我的第一個問題是關於多少「信息」,以及應該將哪些內容放入View中,然後在我的resources.xaml中如何設置它以及如何設置它們?這可能是模糊的,但我想了解我應該考慮在我的視圖中包含哪些控件,以及我應該考慮將哪些代碼放入我的樣式中。

形象的例子 WPF Control Example

MyView.xaml

<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="20 0"> 
    <ItemsControl ItemsSource="{Binding MyModelList}" ItemTemplate="{StaticResource MyViewDataTemplate}" > 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel Orientation="Vertical" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</ScrollViewer> 

Resources.xaml

<DataTemplate x:Key="MyViewDataTemplate"> 
    <Border BorderThickness="0 0 0 1" BorderBrush="Black"> 
     <StackPanel> 
      <Label Content="{Binding Heading}" FontSize="24" /> 
      <Label> 
       <Label.Content> 
        <TextBlock> 
         <TextBlock.Text> 
          <MultiBinding StringFormat="Card: {0}, {1}"> 
           <Binding Path="PropertyA"></Binding> 
           <Binding Path="PropertyB"></Binding> 
          </MultiBinding> 
         </TextBlock.Text> 
        </TextBlock> 
       </Label.Content> 
      </Label> 
     </StackPanel> 
    </Border> 
</DataTemplate> 

回答

1

,我不知道有多少我明白你的問題,但你問的第一件事是放入資源和放入主佈局的內容。

那麼一個簡單的規則就是把可以在資​​源中重用的代碼放在主佈局中。例如,假設您必須在UI的許多地方顯示文本框。現在,您可以將文本框背景,字體,前景,大小等放入資源中,以便每次使用文本框時都可以輕鬆地從資源中重用這些信息。同樣如果發生變化,您只需要在一個地方進行更改,而不是每個文本框本身。

what are the controls I should be looking at to include in my Viewwhat code should I be looking at to put in my styles.

好了,關於第一部分,這完全取決於你想要達到什麼樣的場景。從圖像示例中,網格可以與三列一起使用,因爲看起來有三個部分的UI,即標題然後是兩個文本塊。在第一列中放置一個帶有兩個文本框的堆棧面板(一個用於標題,一個用於小型說明),在下兩列中可以放置一個文本塊。

現在關於你的第二個問題,一旦你已經把的TextBlocks在網格的列,你可以把喜歡的藍色背景和等樣式信息的資源

我用這個XAML圖像中創建結構

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 

     <StackPanel Orientation="Vertical" Grid.Column="0"> 
      <TextBlock FontSize="20">Hilighted</TextBlock> 
      <TextBlock FontSize="10">Card</TextBlock> 
     </StackPanel> 

     <StackPanel Orientation="Vertical" Grid.Column="1"> 
      <TextBlock FontSize="20">0</TextBlock> 
      <TextBlock FontSize="10">Text</TextBlock> 
     </StackPanel> 

     <StackPanel Orientation="Vertical" Grid.Column="2"> 
      <TextBlock FontSize="20">0</TextBlock> 
      <TextBlock FontSize="10">Text</TextBlock> 
     </StackPanel> 
    </Grid> 

現在這些是沒有任何樣式的普通控件。您可以將樣式放入資源並將其應用於文本塊

+0

謝謝,這有助於瞭解佈局。我也意識到DataTemplates可以在你的視圖(作爲控件的一部分)或資源文件中定義(如果它需要多次使用)。這只是想知道我喜歡把這些信息放在哪裏。例如,定義的DataTemplate只使用一次,因此我更喜歡將它放在View中,因爲它只是該用戶控件的一部分。 – David

0

對於「我應該將它放在視圖還是資源中?」這個問題的答案。原來回答自己。如果你把它放在視圖中,這是我開始做大部分事情的地方,那麼最終不會變成問題。如果它成爲一個問題,那麼將視圖中的東西(不管它是什麼)拉出視圖並將其變爲資源是很簡單的。

最終,正如哈里斯哈桑指出的那樣,重用的需要是推動這一決定的原因。除非你知道你將需要重用一種風格,否則YAGNI原則在所有其他方面都適用。

相關問題