使用自動配置概觀
更新:2007 年 11 月
本主題向開發人員介紹以可當地語系化的使用者介面 (UI) 撰寫 Windows Presentation Foundation (WPF) 應用程式的方針。在過去,將 UI 當地語系化是一項非常費時的程序。每當 UI 需要顯示新的語言就必須逐一調整像素。現在有了正確的設計和編碼標準,UI 的建構就可以更簡單,進而減少當地語系化人員調整大小和位置的工作。這種使應用程式的大小和位置更容易調整的撰寫方法稱為「自動配置」,它可以使用 WPF 應用程式設計來達成。
本主題包含下列章節。
使用自動配置的優點
自動配置和控制項
自動配置和編碼標準
自動配置和格線
使用 IsSharedSizeScope 屬性的自動配置和格線
相關主題
使用自動配置的優點
因為 WPF 展示系統強大且有彈性,所以可以在應用程式中針對不同語言的需求來配置項目。下表指出部分自動配置的優點。
在任何語言中,UI 都能正常顯示。
減少文字轉譯之後重新調整控制項位置和大小的需要。
減少重新調整視窗大小的需要。
在任何語言中,UI 配置都能適當呈現。
減少當地語系化的工作,幾乎只要翻譯字串就能完成。
自動配置和控制項
自動配置可以讓應用程式自動調整控制項的大小。例如,控制項可以隨文字長度調整。這項功能讓當地語系化人員可以翻譯字串,而不再需要調整控制項大小以符合翻譯後文字的大小。下列範例會建立具有英文內容的按鈕。
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonLoc.Pane1"
Name="myWindow"
SizeToContent="WidthAndHeight"
>
<DockPanel>
<Button FontSize="28" Height="50">My name is Hope.</Button>
</DockPanel>
</Window>
在這個範例中,要變成西班牙文按鈕只需要變更文字。例如:
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonLoc.Pane1"
Name="myWindow"
SizeToContent="WidthAndHeight"
>
<DockPanel>
<Button FontSize="28" Height="50">Me llamo Esperanza.</Button>
</DockPanel>
</Window>
下圖顯示程式碼範例的輸出。
可自動調整大小的按鈕
注意事項: |
---|
如需前述範例出處的完整範例,請參閱:可當地語系化應用程式的自動配置範例。 |
自動配置和編碼標準
使用自動配置方法需要一組編碼、設計標準及規則,才能產生可完全當地語系化的 UI。下列方針會協助自動配置編碼。
編碼標準 |
說明 |
---|---|
請勿使用絕對位置。 |
|
請勿對視窗設定固定大小。 |
|
加入 FlowDirection。 |
|
使用複合字型而非實體字型 (Physical Font)。 |
|
加入 xml:lang。 |
|
自動配置和格線
Grid 項目對於自動配置相當有用,因為它可以讓開發人員放置項目。Grid 控制項可以在其子項目之間分配可用空間,以欄和列排列,並且將 UI 項目放置在每個儲存格中。UI 項目可以橫跨多個儲存格,因此格線內還可以有格線。格線相當有用,因為它們可以讓您建立並放置複雜的 UI。下列範例示範使用格線來放置部分按鈕和文字。請注意,儲存格的高度和寬度是設為 Auto,因此包含影像按鈕的儲存格會隨影像調整大小。
<Grid Name="grid" ShowGridLines ="false">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="0" FontSize="24">Grid
</TextBlock>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="1" FontSize="12"
Grid.ColumnSpan="2">The following buttons and text are positioned using a Grid.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="2" Background="Pink"
BorderBrush="Black" BorderThickness="10">Button 1
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="2" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Sets the background
color.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="3" Foreground="Red">
Button 2
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="3" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Sets the foreground
color.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="4">
<Image Source="data\flower.jpg"></Image>
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="4" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Adds an image as
the button's content.
</TextBlock>
</Grid>
下圖顯示上述程式碼產生的格線。
格線
注意事項: |
---|
如需完整的程式碼範例,請參閱可當地語系化應用程式的格線範例。 |
使用 IsSharedSizeScope 屬性的自動配置和格線
格線在可當地語系化的應用程式中相當有用,應用程式可以建立隨內容大小調整的控制項。但是,有時候您會想要讓控制項維持特定大小,不論內容有多大。例如,如果您有 [確定]、[取消] 及 [瀏覽] 按鈕,可能就不希望按鈕隨內容調整大小。在此情況下,如果要在多個格線項目之間共用相同的大小,則 Grid 項目的 IsSharedSizeScope 附加屬性就相當有用。下列範例示範如何在多個 Grid 項目之間共用欄和列的大小資料。
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Button Click="setTrue" Margin="0,0,10,10">Set IsSharedSizeScope="True"</Button>
<Button Click="setFalse" Margin="0,0,10,10">Set IsSharedSizeScope="False"</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Grid ShowGridLines="True" Margin="0,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0" Width="200" Height="100"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0" Width="150" Height="100"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
</StackPanel>
<TextBlock Margin="10" DockPanel.Dock="Top" Name="txt1"/>
注意:如需完整程式碼範例,請參閱 HOW TO:在格線之間共用調整大小屬性