使用xaml (silverlight)中自定义控件中的c#变量

本文关键字:自定义控件 变量 xaml silverlight 使用 | 更新日期: 2023-09-27 18:15:22

我已经看了很多其他的帖子,关于这个话题,但现在我已经花了一天多的时间,试图得到一些工作,但我会尝试在这里问这个问题,希望你能帮助我。

我想做一个自定义控件,我可以在属性菜单中添加值,在我的项目中添加控件,它需要每次都有新的东西。

和信息,我需要一个资源控制在xaml,但我不能绑定字符串从c#到我需要在xaml:

c#代码:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Threading;
using WFSilverlight.Shared;
using WFSilverlight.Core;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using BG_CalgaryNC_11611.Controls;
namespace BG_CalgaryNC_11611
{
public partial class BG_Calgary_Text_Nav : UserControl
{
    //public string NavPage = String.Empty;
    [Category("BG")]
    public string PageToNavigate { get; set; }
    [Category("BG")]
    public string DesciptionPageName { get; set; }
    [Category("BG")]
    public string DisplayName { get; set; }
    public BG_Calgary_Text_Nav()
    {
        InitializeComponent();
        NavText.Text = DisplayName;
        NavPage = "BG_CalgaryNC_11611_" + PageToNavigate;
        //this.DataContext = this;
        //NavText.Resources.Add("navPageResourse", NavPage);
        //NavText.Resources.Add("displayNameResourse", DesciptionPageName);
    }
    public string NavPage { get; set; }
}
}

我想使用"NavPage"answers"DesciptionPageName"在xaml中添加它们。

xaml代码:

    <UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:BG_CalgaryNC_11611_Controls="clr-namespace:BG_CalgaryNC_11611.Controls" 
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
mc:Ignorable="d"
x:Class="BG_CalgaryNC_11611.BG_Calgary_Text_Nav"
d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot" Cursor="Hand">
    <Viewbox HorizontalAlignment="Right" VerticalAlignment="Top">
        <TextBlock x:Name="NavText" TextWrapping="Wrap" FontSize="10.667" FontWeight="Bold" Text="TC9-21" Height="16" Width="43">
            <TextBlock.Resources>
                <BG_CalgaryNC_11611_Controls:TranslatableCPNavItem Description="{Binding NavPage, Mode=OneWay}" Source="{Binding DesciptionPageName, Mode=OneWay}" x:Key="target1"/>
            </TextBlock.Resources>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <i:InvokeCommandAction Command="{Binding NavigatToCommand, Mode=OneWay}" CommandParameter="{StaticResource target1}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <TextBlock.Foreground>
                <SolidColorBrush Color="{StaticResource BG_ConnectionArrow_Color}"/>
            </TextBlock.Foreground></TextBlock>
    </Viewbox>
</Grid>

我可以构建项目,但当我添加自定义控件时,我得到这个错误:

system.windows.data类型的对象。绑定'不能转换为'system.string'类型

希望你能帮助我。

使用xaml (silverlight)中自定义控件中的c#变量

我怀疑问题出在这一行

    <BG_CalgaryNC_11611_Controls:TranslatableCPNavItem Description="{Binding NavPage, Mode=OneWay}" Source="{Binding DesciptionPageName, Mode=OneWay}" x:Key="target1"/>

您没有提供您的TranslatableCPNavItem类的源代码,所以我将不得不根据您上面提供的另一个类的代码做一个假设。我猜该类中的Description属性是作为"简单"属性实现的,例如

    public string Description { get; set; }

您不能将Binding应用于这样的属性。如果您希望使用绑定来设置一个属性,那么它需要是一个依赖属性。它应该看起来像下面这样:

    public string Description
    {
        get { return (string)GetValue(DescriptionProperty); }
        set { SetValue(DescriptionProperty, value); }
    }
    public static readonly DependencyProperty DescriptionProperty =
        DependencyProperty.Register("Description",
                                    typeof(string),
                                    typeof(TranslateableCPNavItem),
                                    null);

对于您想要与绑定一起使用的每个属性,这看起来确实需要输入很多,但是有一个propdp代码片段可以为您生成大部分内容。