簡體   English   中英

Visual Studio 2010 XAML布局編輯器不提供“所見即所得”的功能

[英]Visual Studio 2010 XAML layout editor not WYSIWYG

在Visual Studio 2010中創建WPF布局時,只需將控件從“工具箱”拖放到默認元素(通常是網格)上。 當我這樣做時,Visual Studio中顯示的間距與運行時顯示的間距不匹配。 例如,以下分別是兩個布局的可視化編輯器和運行時結果。

編輯

運行

和。

編輯

運行

...請注意,間距已更改。
這是為兩個示例生成的XAML。

  <Button Content="ProjectPattern" Height="23" HorizontalAlignment="Left" Margin="12,296,0,0" Name="butProjPattern" VerticalAlignment="Top" Width="117" Click="butProjPattern_Click" />
    <TextBlock Height="22" HorizontalAlignment="Left" Margin="135,0,0,141" Name="ResultProjPattern" Text="(result)"       VerticalAlignment="Bottom" Width="41" />
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="175,295,0,0" Name="TextBlockPattern" Text="     (pattern file)" Padding="4" VerticalAlignment="Top" Width="135" Background="#FFF1F3FF" /> 
    <Button Content="...browse" Height="23" HorizontalAlignment="Right" Margin="0,294,814,0" Name="buttonPatternBrowse" VerticalAlignment="Top" Width="54" Click="buttonPatternBrowse_Click" />

...和...

<Button Content="Display Cross" Height="24" HorizontalAlignment="Left" Margin="622,108,0,0" Name="buttonCross" VerticalAlignment="Top" Width="117" Click="buttonCross_Click" />
<TextBlock Height="24" HorizontalAlignment="Right" Margin="0,107,344,0" Name="ResultCross" Text="(result)" VerticalAlignment="Top" Width="100" />
<Button Content="Display Diamond" Height="23" HorizontalAlignment="Left" Margin="622,138,0,0" Name="butDiamond" VerticalAlignment="Top" Width="117" Click="butDiamond_Click" />
<TextBlock Height="23" HorizontalAlignment="Right" Margin="0,138,344,0" Name="ResultDiamond" Text="(result)" VerticalAlignment="Top" Width="100" />
<Button Content="DisplayFullField" Height="24" HorizontalAlignment="Left" Margin="622,165,0,0" Name="butFullField" VerticalAlignment="Top" Width="117" />
<TextBlock Height="24" HorizontalAlignment="Right" Margin="0,164,344,0" Name="ResultFullField" Text="(result)" VerticalAlignment="Top" Width="100" />

我添加了按鈕處理程序,文本內容等,但是布局嚴格來說是Visual Studio布局編輯器生成的。 我注意到的一件事是,即使將它從“工具箱”拖放到網格上,Visual Studio對於為不同元素的Horizo​​ntalAlignment選擇“左”還是“右”也不一致。

容器元素只是默認窗口中的默認網格-它可以最小化但不能調整大小。

<Window x:Class="Caller1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="500" Width="1200" ResizeMode="CanMinimize">
    <Grid Height="460"> 

結果是我不得不浪費大量時間在編輯器和運行應用程序之間來“調整”布局。 是什么阻止“ WYSIWYG”布局編輯器與運行時布局匹配,如何使它們對應?

提前致謝。

我看不到您的圖像(啞工作防火牆),但是通過您的XAML可以告訴您您使用的是Grid錯誤。 我知道這可能是編輯器的錯,但是,嚴重的是,您不應該在所有元素上設置WidthHeight屬性。

如果要為Grid的子級設置固定大小,請設置一些RowDefinitionColumnDefinition並設置這些大小。 如果這樣做,您的布局將更易於使用(並且在設計器中可能會更加准確)。 因此,您的第一個Grid如下所示:

<Grid Margin="12,0,0,0">  
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="117" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="138" /> <!-- This is your desired width + horizontal margins -->
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <Button x:Name="butProjPattern" 
          Grid.Column="0" 
          Content="ProjectPattern" 
          VerticalAlignment="Center" 
          Click="butProjPattern_Click" />
  <TextBlock x:Name="ResultProjPattern" 
             Grid.Column="1" 
             Margin="6,0,0,0" 
             Text="(result)" 
             VerticalAlignment="Center" />
  <TextBlock x:Name="TextBlockPattern" 
             Grid.Column="2"
             Margin="3,0,0,0" 
             Padding="4"
             Text="     (pattern file)" 
             Background="#FFF1F3FF" /> 
  <Button x:Name="buttonPatternBrowse" 
          Grid.Column="3"
          Content="...browse" 
          Margin="22,0,0,0" 
          VerticalAlignment="Center" 
          Padding="2,1"
          Click="buttonPatternBrowse_Click"  />
</Grid>

我還要注意的另一件事是,在將其放入Kaxaml (非常適合快速構建XAML布局的原型)之后,我注意到您實際上應該只使用StackPanel 第一個網格實際上可能是這樣簡單得多的實現(您必須在幾個項目上設置Width以匹配布局):

<StackPanel Margin="12,0,0,0" Orientation="Horizontal">  
  <Button x:Name="butProjPattern" 
          Content="ProjectPattern" 
          Width="117"
          Click="butProjPattern_Click" />
  <TextBlock x:Name="ResultProjPattern" 
             Margin="6,0,0,0" 
             Text="(result)" 
             VerticalAlignment="Center" />
  <TextBlock x:Name="TextBlockPattern" 
             Margin="3,0,0,0" 
             Padding="4"
             Width="135"
             Text="     (pattern file)" 
             Background="#FFF1F3FF" /> 
  <Button x:Name="buttonPatternBrowse" 
          Content="...browse" 
          Margin="22,0,0,0" 
          VerticalAlignment="Center" 
          Padding="2,1"
          Click="buttonPatternBrowse_Click"  />
</StackPanel>

此答案不是您實際問題的直接答案,而是避免出現問題的建議。

當對Margin屬性使用精確的控件定位時,通常會遇到UI控件放置問題。 這是一個很好的過程(尤其是在WPF中),允許控件使用可用的各種“ Alignment選項自行放置和/或Alignment 我一直設法使用這種方法來獲得所需的布局。

例如,如果使用GridStackPanel布置控件,則不會遇到此問題。 我所知道的許多WPF開發人員甚至都不用在Visual Studio中使用設計器,因為您提到的問題...在拖放控件然后轉到XAML刪除不需要的值后,它通常可以更快地解決只需自己輸入XAML。

如果您真的想知道為什么Visual Studio設計器...好吧,呃...不能正常工作,那么您可能會Microsoft Developer Forum上遇到更多的運氣,您在哪里實際上可能會被Microsoft員工看到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM