现在的位置: 首页 > 综合 > 正文

Siverlight 中RichTextBox 中注入控件无法使用的问题

2013年04月20日 ⁄ 综合 ⁄ 共 2569字 ⁄ 字号 评论关闭
     虽然接触了silverlight有一段时间,但真的还是很少接触到RichTextBox,这次有时间真的好好有时间接触这个控件,发现这个控件真的很不错,以前只知道用TextBox或者是TextBlock,甚至连图文混排都是用他们,今天才发现用RichTextBox这个远远省事了很多,但我同时也发现为什么我用<InlineUIContainer >注入的控件为什么都是disable掉了,比如我加入一个Button,为什么我都不能点击?
     我以前曾经看过苏鹏的视频,他在录制视频的时候也出现过这个问题,他说可能还是因为silverlight中安全性的问题。但我真的不知道为什么。无论怎么在xaml中设置这个Button 属性中IsEnable="true" 也没有用,用后台绑定Click事件,我就是点不到Button和触发Click事件,后来我自己找到了自己的解决方法,就是在RichTextBox载入完成后再去设置在其中的Button 的IsEnable为true。结果真的可以了.
我也看过http://www.cnblogs.com/024hi/archive/2009/11/19/1606293.html?login=1 的代码,为什么是RichTextArea(我没有见到过), 而且他那个不会有问题? 希望知道的大侠也能告诉小弟。
我的代码:
View Code

<RichTextBox Name="myRichTextBox">
<Paragraph>
<Run Text=" "/>
这是一个简单的RichTextBox,我们如果去看代码,我们发现这个和我们平时用的textBox 和textblock有很大的区别,
他并不是用Text这个属性来进行文本的传入,取而代之,我们看到他是由一个段落一个段落组成的,这也是我当初因为
时间的原因,我并没有把这个控件很好的掌握,直到现在我才发现我当初做的事情完全可以由这个RichTextBox来完成。
</Paragraph>
<Paragraph>
<Run Text=" "/>
比如可能我要分几种我但当初遇到的问题,现在我用richTextBox,来看看是否可以非常方便的解决:
</Paragraph>
<Paragraph>
<Run Text=" "/>
1)当初我们无法对TextBlock或者是TextBox中某几个文字进行设置,现在我们来测试一下,我仅仅用
<Run Text="<"/> Run<Run Text=">"/> 这个标签就可以实现。
<Run Foreground="Blue" Text="这是一个蓝颜色的字符串! "/>
看到没有,我很方便边设置了蓝颜色。
</Paragraph>
<Paragraph>
<Run Text=" "/>
2)可能我要实现一下控件和文字混合,这个在以前的TextBlock或者是TextBox根本不能啃,因为他们只有Text属性,这个就是一个string类型。
但现在我想试试看,我在里面放一个Button,我们可以通过
<Run Text="<"/>InlineUIContainer
<Run Text=">"/>
这个标签来实现,
这是一个Button
<InlineUIContainer >
<Button Content="Button" Name="myButton" IsEnabled="True" Cursor="Hand">
<Button.RenderTransform>
<TranslateTransform Y="4"/>
</Button.RenderTransform>
</Button>
</InlineUIContainer>
<InlineUIContainer >
<Button Content="Button" Name="myButton2" IsEnabled="True" Cursor="Hand" Margin="5,0,0,0">
<Button.RenderTransform>
<TranslateTransform Y="4"/>
</Button.RenderTransform>
</Button>
</InlineUIContainer>
结果我们看到这Button,但我们看到一个很奇怪的地方,就是我们这个Button的状态时disable掉了,所以我们不能点击。
这个问题也在苏鹏的视频中出现过,苏鹏说可能是因为silverlight中安全性的问题,照这样看来难道真的只能放图片了?
现在我再试一个linkButton
<InlineUIContainer >
<HyperlinkButton NavigateUri="http://www.baidu.com" Content="http://www.baidu.com" IsEnabled="True"/>
</InlineUIContainer>
</Paragraph>
</RichTextBox>
光上面代码肯定Button是Disable的,无法点击的
后台代码:
View Code

public partial class RichTextBoxDemo : Page
{
public RichTextBoxDemo()
{
InitializeComponent();


myRichTextBox.Loaded
+= new RoutedEventHandler(myRichTextBox_Loaded);
}

void myRichTextBox_Loaded(object sender, RoutedEventArgs e)
{
var inlineButton
= (Button)myRichTextBox.FindName("myButton");
inlineButton.Click
+= Button_Click;
inlineButton.IsEnabled
= true;
}

// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}

private void Button_Click(object sender, RoutedEventArgs e)
{

}

}

 

效果图:(一个Button 是可以点击的,而另一个没有做处理的Button 是不可以点击)

抱歉!评论已关闭.