Вот как вы можете это сделать.
document.getElementById('ifrmMsg').contentWindow.$('a:first').trigger('click');
Для этой цели вы также можете использовать postMessage()
. Он также будет работать с перекрестным доменом. Однако JS внутри iframe должен прослушивать событие message
, т. Е. Вам нужно управлять источником iframe.
Вы устанавливаете DataContext в элементе управления на себя, тем самым перезаписывая DataContext при использовании этого элемента управления в других элементах управления. Если взять в качестве примера вашу привязку в вашей ситуации:
<src:BlueTextBox BlueText="{Binding Path=MyString}" />
После загрузки и установки всех Datacontext, он будет искать путь MyString в вашем элементе управления BlueTextBox из-за того, что вы установили DataContext для него. Я думаю, что вы не так это задумали ;).
Решение:
Измените привязку текста на одну из 2 привязок:
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type src:BlueTextBox}}, Path=BlueText}
или
Назовите ваш элемент управления Root (или что-то вроде этого)
<UserControl x:Name="Root"
{Binding ElementName=Root, Path=BlueText}
И уберите
DataContext = this;
из конструктора вашего UserControl и он должен работать как шарм....
Я думаю, в этом случае вам нужно установить свойство ElementName
в привязке. Что-то вроде этого:
<UserControl x:Class="Binding2.BlueTextBox" x:Name="blueTextBox"...
<Grid>
<TextBox x:Name="myTextBox" Text="{Binding ElementName=blueTextBox, Path=BlueText}" Foreground="Blue" Width="100" Height="26" />
</Grid>
Возможно, вам нужно добавить свойство FrameworkPropertyMetadata, где указать FrameworkPropertyMetadataOptions.AffectsRender и AffectsMeasure.