我在windows phone应用程序中工作,我有一个ListBox控件。一个按钮作为内部控制。
因此在绑定数据后的列表20按钮中。现在我想在点击按钮后更改按钮的数据。
这是我的示例代码。这是我的第一个应用程序Windows手机。
<ListBox Grid.Row="1" HorizontalAlignment="Left" Margin="10,10,0,0" Name="lstInstagramTags" VerticalAlignment="Top" Width="444" Height="562" SelectionChanged="lstInstagramTags_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="100" Margin="-10,-10,-10,-10">
<Button Click="Button_Click" Content="NeedToChangeThisValue" Width="150" FontSize="13" Height="60" Margin="-560,35,5,5" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
private void Button_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(myUri);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myRequest);
}
void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
// End the stream request operation
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
string PostData = "action=follow&access_token=966258514.201df4f.4b1c5015a7784a63aac00b9a902c4176";
// Create the post data
string postData = PostData;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Add the post data to the web request
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
// Start the web request
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
**string result** = httpWebStreamReader.ReadToEnd();
}
}
我想根据结果(标记粗体)更改按钮数据。我没有根据这个结果更新任何控件。
请告诉我任何好方法。
由于
答案 0 :(得分:1)
我认为这个问题主要是以选项为基础的,所以这里有三个想法
在当前页面中定义一个按钮
private Button helerButton;
private void Button_Click(object sender, RoutedEventArgs e)
{
helerButton = (Button)sender;
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(myUri);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myRequest);
}
void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
string result = httpWebStreamReader.ReadToEnd();
helerButton.Content = result
}
}
您可以稍微改变代码架构
private void Button_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(myUri);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.BeginGetRequestStream(r =>
{
var httpRequest = (HttpWebRequest)r.AsyncState;
var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r);
Stream postStream = myRequest.EndGetRequestStream(r);
string PostData = "action=follow&access_token=966258514.201df4f.4b1c5015a7784a63aac00b9a902c4176";
string postData = PostData;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
httpRequest.BeginGetResponse(q =>
{
HttpWebRequest request = (HttpWebRequest)q.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(q);
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
string result = httpWebStreamReader.ReadToEnd();
Dispatcher.BeginInvoke(() =>
{
Button b = (Button)sender;
b.Content = result;
//for consideration
//b.IsEnabled
});
}
}, httpRequest);
}, myRequest);
}
答案 1 :(得分:0)
您需要为同一个
使用可视化树助手使用此方法挖掘列表框的可视树
public static T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
try
{
int childCount = VisualTreeHelper.GetChildrenCount(parentElement);
if (childCount == 0)
return null;
for (int i = 0; i < childCount; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
{
return (T)child;
}
else
{
var result = FindFirstElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return null;
}
这就是你将如何在代码中使用这种方法
ListBoxItem SelectedListBoxItem = this.lstInstagramTags.ItemContainerGenerator.ContainerFromIndex(int index) as ListBoxItem;
if (SelectedListBoxItem == null)
return;
// Iterate whole listbox tree and search for this items
Button btn= common.FindFirstElementInVisualTree<Button>(SelectedListBoxItem );
btn.Content="Hello";
还有一个Link
希望这有帮助。