2009-05-13 37 views
19

Tôi đã lừa xung quanh với lề và đệm và thấy rằng một giá trị âm được chấp nhận và mang lại hiệu quả tốt đẹp trong các trường hợp thích hợp. Ví dụ, nếu bạn có một biên giới với một đối tượng đầy và bạn muốn màu đối tượng đầy để vượt qua biên giới. Có ai khác không?WPF mẹo và thủ thuật đơn giản?

Trả lời

3

Tính bất động sản có sẵn như là một tỷ lệ phần trăm:

<Grid.RowDefinitions> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
</Grid.RowDefinitions> 

EDIT:

này hoạt động nhưng không phải là dấu hiệu của cách * chức năng tham số. Điều này:

<Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
</Grid.RowDefinitions> 

cung cấp chức năng tương tự. Nếu bạn muốn một thứ gì đó khác với các hàng có độ cao bằng nhau, bạn có thể sử dụng:

<Grid.RowDefinitions> 
    <RowDefinition Height="1*"/> 
    <RowDefinition Height="2*"/> 
    <RowDefinition Height="3*"/> 
    <RowDefinition Height="4*"/> 
</Grid.RowDefinitions> 

sẽ chia chiều cao sẵn có cho 10 và duy trì chiều cao tương đối của mỗi hàng. Ngoài ra, các giá trị có thể là 0,1, 0,2, 0,3 và 0,4 hoặc bất kỳ giá trị tỷ lệ nào.

5

Bao gồm dấu ngoặc nhọn trong nội dung của điều khiển.

<Button Content="{}{This is not a markup extension.}"/> 
7

Đặt một phong cách debug cung cấp tín hiệu thị giác:

<Window.Resources> 

    <Style x:Key="DebugGrid" TargetType="Grid"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="ShowGridLines" Value="True"/> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 

</Window.Resources> 

<Grid Name="Grid" 
     Style="{StaticResource DebugGrid}" 
     Background="Black">... 
+2

Ah, trình tiết kiệm thời gian xác định .. –

1

Chèn dấu ngoặc kép trong nội dung:

<Button Name="Button" 
     Background="AntiqueWhite" 
     Content="{}{Background=&#0034;AntiqueWhite&#0034;}"/> 
11

Một tính năng mới của WPF giao với 3,5 SP1 là khả năng định dạng chuỗi của bạn trong khi ràng buộc. Nó giúp loại bỏ việc sử dụng IValueConverter cho các trường hợp phổ biến như vậy. Dưới đây là một số ví dụ để giúp bạn đi mà tôi sao chép từ this blog post

<TextBox Text="{Binding Path=Double, StringFormat=F3}"/> 
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/> 
<TextBox Text="{Binding Path=Double, StringFormat=Amount: \{0:C\}}"/> 
<TextBox> 
    <TextBox.Text> 
    <Binding Path="Double" StringFormat="{}{0:C}"/> 
    </TextBox.Text> 
</TextBox> 
0

Một Grid với Background trái như mặc định hoặc thiết lập với một bàn chải Transparent sẽ không cháy, sự kiện IsMouseOver trừ khi con trỏ qua một điều khiển chứa. Để đảm bảo sự kiện được kích hoạt trên chính điện thoại Grid, hãy mô phỏng Transparency bằng cách đặt Background thành vùng chứa màu Background.

+2

không đúng cho nền Brushes.Transparent dưới dạng .net 4.0 ít nhất (tôi không biết các phiên bản trước), nhưng đúng với nền mặc định được đặt thành "{ x: Null} "và không hoạt động như Brushes.Transparent. tức là: nếu bạn muốn bẫy mouseDownEvent trên điều khiển nền trong suốt, bạn phải đặt nền của nó thành Brushes.Transparent – David

5

IsMouseOverIsMouseDirectlyOver là các sự kiện khác nhau. IsMouseOver phản hồi mọi chuyển động của chuột trong tầm kiểm soát và đó là trẻ em. IsMouseDirectlyOver chỉ trả lời nếu con trỏ vượt quá quyền kiểm soát. Ví dụ: nếu bạn có nhãn nằm trong đường viền, sự kiện IsMouseDirectlyOver cho Đường viền chỉ kích hoạt nếu con trỏ nằm phía trên Đường viền nhưng KHÔNG vượt quá Nhãn được chứa.

+0

Không chắc liệu câu trả lời của bạn có trả lời được câu hỏi gốc hay không nhưng nó đã làm rõ những gì tôi đang tìm kiếm. (+1) – jpierson

0

Điều khiển với nền được đặt thành Trong suốt sẽ KHÔNG kích hoạt sự kiện IsMouseOver hoặc IsMouseDirectlyOver. Ví dụ, nếu một Border Background được đặt là Transparent nhưng BorderBrush = Blue và BorderWidth là <> 0, các sự kiện MouseOver sẽ tự cháy trong khi vượt qua Border nhưng không phải trong khi vượt qua phần bên trong của điều khiển.

18

Gỡ lỗi ràng buộc WPF.

Thêm truy tìm đối với tài sản bị ràng buộc:

<Window … 
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"/> 
    <TextBlock Text="{Binding Path=Caption, 
diagnostics:PresentationTraceSources.TraceLevel=High}"…/> 

Bạn sẽ nhận được trong cửa sổ đầu ra nhiều chi tiết về các ràng buộc:

PropertyChanged event from SomeObject (hash=1) 
SetValue at level 0 from SomeObject (hash= 1) using RuntimePropertyInfo(Field): 
'False' 
TransferValue - got raw value 'False' 
TransferValue - using final value 'False' 

// EDIT More Info here.

Ariel

2

Khách sạn là BorderThickness. Không có vấn đề bao nhiêu lần bạn gõ BorderWidth, nó sẽ không hoạt động!

7

Visibility là một trong ba trạng thái System.Windows.Visibility liệt kê:

  • Visible - Các yếu tố được kết xuất và tham gia vào bố cục.
  • Đã thu gọn - Phần tử không hiển thị và không tham gia vào bố cục. Hiệu quả cho nó một chiều cao và chiều rộng là 0 và hành xử như thể nó không tồn tại.
  • Ẩn - Phần tử ẩn nhưng tiếp tục để tham gia bố cục.
3

PaddingMargin được nhập bằng cú pháp được phân cách bằng dấu phẩy và có loại Độ dày. Họ có thể được nhập như:

  • Padding = "5" (Padding là 5 trên tất cả bốn mặt)
  • Padding = "5,10,15,20" (Padding được trái: Top 5: 10 Kích chuột phải : 15 Bottom: 20)
  • Padding = "5,10" (Padding là 5 trên trái/phải và 10 trên Top/dưới)
+0

Bạn cũng có thể phân định chúng theo không gian đơn giản. Đệm = "5 10 15 20" –

3

Cung cấp hàng độc đáo hoặc cột trong GridSplitter để đảm bảo rằng nó không bị ẩn bởi các điều khiển khác và cư xử như mong đợi.

0

Đặt một tài sản trong Bộ luật Đằng sau một DynamicResource:

Border_Toolbar.SetResourceReference(BackgroundProperty, "Brush_ToolbarBackground") 
2

Quyết định kích thước của một điều khiển dựa trên khác khi chạy.

<... Width="{Binding ElementName=referenceElement, Path=ActualWidth}" ../> 

Điều này cũng có thể được thực hiện với Height/MaxHeight v.v.

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