2013-01-24 48 views
1

嘿傢伙我創建了一個帶有自定義usercontrol的wpf應用程序,問題是我無法更新或者說在運行時更改自定義控件的屬性, - >繼承人代碼用戶控制 文件:usercontrol.xamlWpf - 在運行時更新自定義用戶控件

<UserControl x:Class="ExampleWpf.UserControlExample" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

      Width="Auto" Height="Auto"> 
<Rectangle Width="60" Height="200" Fill="#FFB65959" Name="Box1"></Rectangle> 

文件:usercontrol.xaml.cs

namespace ExampleWpf{ 
public partial class UserControlExample : UserControl 
{ 
    public UserControlExample() 
    { 
     InitializeComponent(); 
    } 
    public double Box1Width 
    { 
     get { return (Box1.Width); } 
     set { Box1.Width = value; } 
    } 
} 

--->這裏對於Wpfapplication 文件SA簡單的代碼:Mainwindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     UserControlExample uc = new UserControlExample(); 
     uc.Box1Width = 100; 

    } 
} 

所有我想改變自定義控件的寬度在運行時,當按鈕點擊用戶---->但遺憾的是我沒有按」 t成功 請幫我出來

+0

我只是想知道..你能顯示xaml代碼Button嗎? –

+0

你去 - >

回答

2

您正在創建一個新實例您的用戶控件,而不是做任何事情。

你應該找到現有的實例的控制和更新。

您還應該通過Dependency Properites實現此類行爲。這爲您提供了本教程中概述的各種優點,但其中的主要優點是您可以在運行時設置這樣的屬性。

+0

是否有可能通過調用最後一個實例的〜Destructor並再次調用IntializeComponent()方法? – Saubar

+0

@MOkOpti - no。 – ChrisF

+0

那麼我怎麼能找到控件的現有實例? – Saubar

0

使用您放置在你的XAML(可通過名稱屬性遠東),像這樣的實例:

<uc:UserControlExample Name="myUC"/> 

myUC.Box1Width = 100; 

另一個問題可能是,你只需要改變UC的矩形的寬度。因此,可以說UC的寬度爲50,而你稱之爲uc.Box1Width = 100,UC的寬度仍然爲50,所以它不會改變任何東西。

+0

那麼ActualWidth怎麼樣? – Saubar

+0

你不能設置ActualWidth。只需通過this.Width = value設置UC本身的寬度;並確保矩形伸展與'Stretch = Fill' –