2010-10-16 37 views
6

tôi đang tìm cách để thiết lập một UserControlContent của người khác UserControl trong XAML, trong cùng một cách bạn có thể đặt một Button'sContent được bất cứ điều gì.WPF UserControl bên trong một UserControl

Hãy nói rằng tôi "bên ngoài" UserControl trông như thế này:

<MyUserControl> 
    <Grid> 
     <Border FancyPantsStyling="True"> 

     <-- I want to insert other controls here --> 

     </Border> 
    </Grid> 
</MyUserControl> 

Và tôi muốn nhanh chóng theo cách này:

<local:MyUserControl> 
    <local:MyUserControl.Content> 
     <local:AnotherControl /> 
    </local:MyUserControl.Content> 
</local:MyUserControl> 

Làm thế nào để thiết kế MyUserControl để render nó Content trong một địa điểm cụ thể?

Trả lời

0

trừ khi tôi hiểu nhầm câu hỏi, bạn có thể sử dụng trong kiểm soát của mình và đặt nội dung của nó thành bất kỳ điều gì bạn cần.

4

Tất cả nội dung bạn đưa vào XAML của UserControl là Nội dung của nó, do đó bạn không thể chèn nội dung nào khác bằng cách đặt thuộc tính Nội dung. Có một vài cách khác nhau bạn có thể xử lý việc này. Nếu bạn không có bất cứ điều gì trong code-behind cho MyUserControl bạn có thể chỉ nhận được thoát khỏi nó và sử dụng cái gì đó như:

<ContentControl> 
    <ContentControl.Template> 
     <ControlTemplate TargetType="{x:Type ContentControl}"> 
      <Grid> 
       <Border FancyPantsStyling="True"> 
        <ContentPresenter/> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </ContentControl.Template> 

    <local:AnotherControl/> 
</ContentControl> 

Nếu bạn có mã đằng sau đó không truy cập vào các yếu tố XAML trực tiếp bạn có thể làm một điều tương tự với kiểm soát hiện tại của bạn (kể từ UC xuất phát từ ContentControl):

<local:MyUserControl> 
    <local:MyUserControl.Template> 
     <ControlTemplate TargetType="{x:Type local:MyUserControl}"> 
      <Grid> 
       <Border FancyPantsStyling="True"> 
        <ContentPresenter/> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </local:MyUserControl.Template> 
</local:MyUserControl> 

Nếu bạn cần phải giữ cho nội dung hiện có kết nối với bạn code-behind bạn có thể sử dụng một DataTemplate để vượt qua trong các nội dung bên ngoài (thành DP mới trên MyUserControl) và áp dụng mẫu đó cho một ContentControl trong XAML của UC.

+0

Tôi đã đập đầu vào tường trên cùng một vấn đề. Câu trả lời này làm việc cho tôi. Cảm ơn bạn! – mbmcavoy

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