2012-07-12 51 views
2

是否有某種用於爲自助服務終端觸摸屏創建正確GUI的「最佳實踐」手冊?這些應用程序需要在不同的屏幕分辨率下具有一致的外觀和感覺,更重要的是屏幕比例(因爲所有內容都以矢量形式呈現,所以屏幕分辨率和DPI不應該成爲WPF的問題)。適用於WPF自助服務終端觸摸屏應用程序的Viewbox的正確使用

以我試圖爲觸摸屏創建簡單鍵盤爲例。我用UniformGrid使每個按鈕獲得同等大小的細胞:

enter image description here

下面是該代碼:這使得它們非

<TabItem Header="Test 1"> 
     <ItemsControl ItemsSource="{Binding KeyboardItems}" SnapsToDevicePixels="True"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Viewbox Margin="5"> 
         <Button Content="{Binding}"></Button> 
        </Viewbox> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Columns="8" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </TabItem> 

注意,所有按鍵均設置爲內容所以每個按鈕都有自己的尺寸......這就是Viewbox如何擴展它的內容,當然這種GUI是沒有問題的。這不是我想要的一些自助服務應用程序使用鍵盤,所以下一次更好的版本如下:

enter image description here

<TabItem Header="Test 2"> 
     <ItemsControl ItemsSource="{Binding KeyboardItems}" SnapsToDevicePixels="True"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
         <Button Margin="5"> 
          <Viewbox> 
           <TextBlock Text="{Binding}" /> 
          </Viewbox> 
         </Button> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Columns="8" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </TabItem> 

現在,這是因爲Viewbox控件好一點,現在包裹的內容,而不是整個按鈕。但請注意,因爲我們現在正在包裝按鈕的內容而不是整個按鈕,所以按鈕的邊框現在不會縮放。我希望這也能夠擴展,而不僅僅是內容。在第一個例子中,我們有這個,但GUI的整體外觀很糟糕。

另請注意,在此版本中,我已將Margin設置爲按鈕,並在Viewbox的第一個版本中設置了Margin。這意味着在第一個版本中,頁邊距也會縮放(我想要!),而在第二個版本中,它對於任何屏幕尺寸都將保持不變。因此,對於真正的大屏幕,按鈕之間的空白區域會變得相對較小,儘管它們絕對具有恆定的大小(不是我想要的!)。

這裏是生成鍵盤按鈕的代碼:

public partial class MainWindow : Window 
{ 
    public List<string> KeyboardItems { get; set; } 

    public MainWindow() 
    { 
     KeyboardItems = new List<string>(); 
     for (char c = 'A'; c <= 'Z'; c++) 
     { 
      KeyboardItems.Add(c.ToString()); 
     } 
     KeyboardItems.Add("Space"); 

     DataContext = this; 
     InitializeComponent(); 
    } 
} 

這樣的問題都是圍繞WPF觸摸屏售貨亭的發展,所以我想聽聽你來約在處理一些縮放想法和解決方案的問題。

回答

1

你沒告訴我們測試3,我想可能是這樣的:

<TabItem Header="Test 3"> 
    <Viewbox> 
     <ItemsControl ItemsSource="{Binding KeyboardItems}" SnapsToDevicePixels="True"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
         <Button Margin="5"> 
          <TextBlock Text="{Binding}" /> 
         </Button> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Columns="8" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </Viewbox> 
</TabItem> 

確實有預期的效果?

+0

這樣做效果更好,我沒有想到,但它的問題是,按鈕現在沒有延伸到所有可用空間。你有什麼想法如何在這個適當的縮放的同時完成? – matori82 2012-07-22 13:01:55

+0

這就是視圖框的拉伸模式。將其更改爲填充並填充所有可用空間,即使這意味着按鈕在任一方向都拉長。 – 2012-07-22 15:09:13

+0

拉伸=「填充」會扭曲不屬於選項的按鈕內的文字。我需要的是這樣的:http://stackoverflow.com/questions/4542835/making-a-viewbox-scale-vertically-but-stretch-horizo​​ntally然而,解決方案有自己的故障(例如行高定義通過*語法不在網格中...不知道爲什麼) – matori82 2012-07-22 15:42:28

相關問題