2012-01-24 36 views
14

Tôi muốn đặt Margin mặc định là 3 trên tất cả các điều khiển tôi đặt trên tất cả các cửa sổ của mình và có thể ghi đè giá trị này chỉ trên một số lượng rất nhỏ các mục.Làm cách nào để đặt Margin mặc định cho tất cả các điều khiển trên tất cả các cửa sổ WPF của tôi?

Tôi đã nhìn thấy một số cách tiếp cận như làm phong cách nhưng sau đó tôi cần phải phong cách tất cả mọi thứ, tôi muốn một cái gì đó hơn có thể được thực hiện cho tất cả các điều khiển với nhau. Tôi đã nhìn thấy những thứ khác như MarginSetter nhưng có vẻ như nó không đi qua subpanels. Tôi muốn Margin chỉ trên các điều khiển tôi đặt ở cửa sổ, không có gì để làm với các biên giới hoặc những thứ khác của cây thị giác.

Có điều gì đó khá cơ bản đối với tôi. Ý tưởng nào?

Xin cảm ơn trước.

+0

biên giới là điều khiển. những gì wring với việc sử dụng phong cách? Nếu bạn sử dụng Wpf có một cái nhìn tại phong cách tiềm ẩn - những người có thể được áp dụng cho một loại cụ thể (SL5 là vụ phải có chúng quá). –

+0

@ Dmitry: những gì sai là tôi sẽ cần phải tạo ra một phong cách cho mỗi và mọi điều khiển được tạo ra bởi bất cứ ai mà tôi sử dụng. Đây không phải là một giải pháp tuyệt vời khi nhớ rằng tất cả các điều khiển đều có các lớp cơ sở và thừa kế được sử dụng để tránh những thứ này (lặp lại mọi thứ luôn sai khi lập trình) –

+0

Bạn đã đọc những gì tôi nói - sử dụng phong cách ngầm - chúng được áp dụng ở một loại thay vì ở cấp độ thể hiện. –

Trả lời

17

Giải pháp duy nhất tôi có thể tìm là áp dụng kiểu cho từng điều khiển bạn đang sử dụng trên cửa sổ (tôi biết đó không phải là điều bạn muốn). Nếu bạn chỉ sử dụng một vài loại điều khiển khác nhau nó không quá nặng nề để làm một cái gì đó như thế này:

<Window x:Class="WpfApplication7.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <!-- One style for each *type* of control on the window --> 
     <Style TargetType="TextBox"> 
      <Setter Property="Margin" Value="10"/> 
     </Style> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Margin" Value="10"/> 
     </Style> 
    </Window.Resources> 
    <StackPanel> 
     <TextBox Text="TextBox"/> 
     <TextBlock Text="TextBlock"/> 
    </StackPanel> 
</Window> 

Chúc may mắn ...

+0

Vâng, có một điều là Windows Form có giá trị Margin mặc định ... và mọi thứ luôn cần một bộ ký quỹ. Tôi đang tìm một giải pháp chung để áp dụng nó cho tất cả các ứng dụng của mình. Có vẻ như tôi sẽ phải tạo ra một phong cách cho mỗi điều khiển ... điều đó có thể khiến bạn nhớ rằng tôi sẽ cần phải duy trì thứ chết tiệt đó mãi mãi. –

+0

Vâng, điều này chắc chắn là một thiếu sót trong WPF. Nếu tôi tìm thấy một giải pháp tốt hơn, tôi sẽ đăng nó ở đây. –

15

Bạn có thể liên kết tất cả các thuộc tính Margin của bạn bằng cách đề cập đến một " Độ dày "được xác định trong tài nguyên của bạn. Tôi chỉ làm điều này trong một dự án ...

<!-- somwhere in a resource--> 
<Thickness x:Key="CommonMargin" Left="0" Right="14" Top="6" Bottom="0" /> 

<!-- Inside of a Style --> 
<Style TargetType="{x:Type Control}" x:Key="MyStyle"> 
    <Setter Property="Margin" Value="{StaticResource CommonMargin}" /> 
</Style> 
<!-- Then call the style in a control --> 
<Button Style="{StaticResource MyStyle}" /> 

<!-- Or directly on a Control --> 
<Button Margin="{StaticResource CommonMargin}" /> 

Chìa khóa để tôi đã tìm ra rằng Ký quỹ được xác định bởi "Độ dày". Hãy cho tôi biết nếu đó là đủ rõ ràng hoặc nếu bạn cần tôi để đặt nó trong một ví dụ XAML làm việc đầy đủ.

1

Bạn có thể áp dụng lề theo kiểu nút của mình. Và khi bạn sử dụng các nút với phong cách này trong StackPanel wpf sẽ áp dụng khoảng cách cần thiết. ví dụ xác định trong ResourceDictionary hoặc bất cứ điều gì:

<Style x:Key="myButtonStyle" TargetType="{x:Type Button}"> 
<Setter Property="Margin" Value="10"/> 
.... 
</Style> 

sau đó trong Yor nét StackPanel XAML:

<StackPanel> 
    <Border BorderThickness="0"/> 
    <Button x:Name="VertBut1" Style="{StaticResource myButtonStyle}"  Content="Button1"/> 
    <Button x:Name="VertBut2" Style="{StaticResource myButtonStyle}"  Content="Button2"/> 
    <Button x:Name="VertBut3" Style="{StaticResource myButtonStyle}"  Content="Button3"/> 
</StackPanel> 

liên quan Georgi

+0

là nó có thể thêm phong cách cho stackpanel và có phong cách truyền xuống cho tất cả các yếu tố con? – BKSpurgeon

Các vấn đề liên quan